Eliminar todos los enlaces simbólicos de archivos en un comando

6

Quiero eliminar todos los enlaces simbólicos de los archivos. Tengo una estructura de directorio como la /usr/local/instantclient/11.2.0.3que contiene muchos archivos y tengo enlaces simbólicos de estos archivos. /usr/local/lib/Ahora quiero eliminar todos estos enlaces simbólicos de esos archivos. ¿Cómo puedo hacer esto en un solo comando? Si elimino el directorio real que /usr/local/instantclient/11.2.0.3contiene los archivos, dejará los enlaces rotos /usr/local/lib.

MutantMahesh
fuente

Respuestas:

12

Para eliminar los enlaces (desde man findabajo -type):

          l      symbolic link; this is never true if the -L option or the
                 -follow option is in effect, unless the symbolic link  is
                 broken.  If you want to search for symbolic links when -L
                 is in effect, use -xtype.

Creo que esto debería hacer el truco:

find /usr/local/lib/ -maxdepth 1 -follow  -type l

¿El resultado produce una lista de los archivos que desea eliminar? Si es así, cuando esté 100% seguro:

find /usr/local/lib/ -maxdepth 1 -follow  -type l -delete

Esto eliminará solo los enlaces rotos. Para eliminar todos los enlaces, elimine la -followestrofa, pero no lo haría debajo /usr/local/lib.

Petter H
fuente
1
Solo para aclarar: esto supone que el directorio de destino ya se ha eliminado, por lo que los enlaces ya están rotos. El comando enumerará todos los enlaces simbólicos rotos en el /usr/local/libdirectorio (pero no recurse), por lo que si hay otros enlaces rotos, mostrará más de lo necesario. No es que haya una gran cantidad de enlaces rotos para empezar, por lo que probablemente esté bien, pero es posible que un sistema tenga enlaces rotos a propósito, y nos gustaría evitarlos.
Daniel Andersson el
1
Probé el comando sugerido por Petter. La -followopción no funciona. Solo find /usr/local/lib/ -maxdepth 1 -type l | deletefuncionó. Pero creo que esta no es la mejor manera de hacerlo. En realidad, no hay forma de enumerar todos los enlaces blandos de un archivo, mientras que los enlaces duros de un archivo se pueden enumerar utilizando el valor de inodo del archivo. Aquí hay una discusión al respecto stackoverflow.com/questions/4532241/…
MutantMahesh
Aquí se explica cómo encontrar y eliminar todos los enlaces duros a un archivo linuxcommando.blogspot.in/2008/09/… pero esto no funciona para los enlaces simbólicos.
MutantMahesh
Si bien puede no haber una forma (fácil) de "reenviar el enlace de lectura" a un enlace simbólico, no veo cómo eso es relevante para su problema; ¿Dijiste que los enlaces creados estaban ubicados en /usr/local/lib? además, ¿no tienes -followopción en tu versión de find?
Petter H