Con el comando:
ls -la *
Puedo enumerar todos mis enlaces simbólicos.
¿Cómo puedo eliminar todos los enlaces simbólicos que están vinculados a una carpeta especial?
Por ejemplo:
En mi directorio usr/local/bin
Tengo las siguientes entradas:
lrwxrwxrwx 1 root root 50 Apr 22 14:52 allneeded -> /usr/local/texlive/2011/bin/x86_64-linux/allneeded lrwxrwxrwx 1 root root 47 Apr 22 14:52 amstex -> /usr/local/texlive/2011/bin/x86_64-linux/amstex lrwxrwxrwx 1 root root 24 Apr 23 19:09 arara -> /home/marco/.arara/arara
Ahora quiero eliminar todos los enlaces con la ruta /usr/local/texlive/
Comentarios
- ¿Te refieres a eliminar todos los enlaces simbólicos vinculados a una carpeta de destino? ¿O mover todos los enlaces simbólicos encontrados a una carpeta específica?
- @uther: me refiero a eliminar los enlaces.
Responder
Asegúrese de leer la respuesta alternativa . Es aún más pertinente, aunque no se votó tan alto en este momento.
Puede usar esto para eliminar todos los enlaces simbólicos:
find -type l -delete
con versiones modernas find
.
En versiones de búsqueda anteriores, puede que tenga que ser:
find -type l -exec rm {} \; # or find -type l -exec unlink {} \;
Para limitar a un determinado destino de enlace, suponiendo que ninguna de las rutas contenga un carácter de nueva línea:
find -type l | while IFS= read -r lnkname; do if [ "$(readlink "$lnkname")" == "/your/exact/path" ]; then rm -- "$lnkname"; fi; done
o bien formateado
find -type l | while IFS= read -r lnkname; do if [ "$(readlink "$lnkname")" = "/your/exact/path" ]; then rm -- "$lnkname" fi done
El if
también podría incluir una condición más compleja, como hacer coincidir un patrón con grep
.
Adaptado a su caso:
find -type l | while IFS= read -r lnk; do if (readlink "$lnk" | grep -q "^/usr/local/texlive/"); then rm "$lnk"; fi; done
o bien formateado:
find -type l | while IFS= read -r lnk do if readlink "$lnk" | grep -q "^/usr/local/texlive/" then rm "$lnk" fi done
Comentarios
- ¿Este comando elimina todos los enlaces simbólicos? Por favor, vea mi edición arriba ..
- @ Marco: sí, las primeras tres líneas lo harían. Editando más 🙂
- También agregaría un
-print
al final del
comando para obtener comentarios visuales.
Responder
Con un find
moderno que admita -lname
:
find /usr/local/bin -lname "/usr/local/texlive/*" -delete
debería funcionar it.
Comentarios
- Esa es una gran y simple solución. Probé y funciona de maravilla. Gracias
- Presumiblemente, debería ser
find /usr/local/bin
- Ni siquiera moderno, necesariamente. GNU
find
ha tenido-lname
por más tiempo del que lo he mantenido (desde alrededor de 2003). - @JamesYoungman: ¡Gracias! Por moderno
find
realmente me refería a GNUfind
. 😉 Uséusr/local/bin
, porque eso ' es lo que usó el OP.
Respuesta
La find
solución es excelente.
En caso de que su búsqueda no lo haga admite -lname
, aquí hay otra forma que usa solo shell y readlink
.
cd /usr/local/bin for f in *; do case "$(readlink "$f")" in /usr/local/texlive/*) rm "$f" ;; esac done
Responde
Con zsh
:
rm -f /usr/local/bin(@e"{[[ $REPLY:P = /usr/local/texlive/* ]]}")
$REPLY:P
resuelve completamente la ruta a una sin enlace simbólico, por lo que suponiendo que /usr/local/texlive
no tiene enlace simbólico , eliminaría todos los archivos que, después de la resolución del enlace simbólico, se encuentran en /usr/local/textlive
que incluirían enlaces a /usr/local/texlive/foo
pero también a ../texlive/bar
oa /usr/./local/texlive/whatever
o a /some/other/symlink
, que en sí mismo es un enlace simbólico que apunta a /usr/local/texlive
, etc.
Respuesta
Vaya a su ruta y establezca su configuración de ruta
ls -alh|grep "your-pattern-to-file-or-folder-for-symlink"| awk "{print $9}"|xargs rm -rf
Comentarios
- Dado que estas son rutas como
usr/local/bin
quegrep
está buscando,grep -E
es el camino a seguir. De lo contrario, no habría resultados coincidentes. ¡Tambiénh
enls
no ' tiene ningún propósito aquí!-h, --human-readable : with -l, print sizes in human readable format (e.g., 1K 234M 2G)
. Para obtener más información, consulteman ls
oman grep
Respuesta
sudo unlink /path/of/your/package
eso es
Comentarios
- ¿Cómo elimina esto todos los enlaces simbólicos que apuntan a objetivos debajo de la ruta dada? Tenga en cuenta que la pregunta se refiere a eliminar los enlaces simbólicos en un directorio en particular que apunta a objetivos en algún otro directorio.