¿Cómo encuentro todos los enlaces simbólicos en un árbol de directorios?
Estoy intentando encontrar todos los enlaces simbólicos dentro de un árbol de directorios para mi sitio web. Sé que puedo utilizarlo find
para hacer esto, pero no sé cómo comprobar los directorios de forma recursiva.
Probé este comando:
find /var/www/ -type l
... y luego descubrí que el contenido /var/www
son enlaces simbólicos, así que cambié el comando a:
find -L /var/www/ -type l
Tarda un poco en ejecutarse, sin embargo, no obtengo coincidencias.
¿Cómo consigo que esto verifique los subdirectorios?
Esto recorrerá recursivamente el /path/to/folder
directorio y enumerará solo los enlaces simbólicos:
ls -lR /path/to/folder | grep '^l'
Si tu intención es seguir los enlaces simbólicos también, debes usar tu find
comando pero debes incluir la -L
opción; de hecho la find
página de manual dice:
-L Follow symbolic links. When find examines or prints information
about files, the information used shall be taken from the prop‐
erties of the file to which the link points, not from the link
itself (unless it is a broken symbolic link or find is unable to
examine the file to which the link points). Use of this option
implies -noleaf. If you later use the -P option, -noleaf will
still be in effect. If -L is in effect and find discovers a
symbolic link to a subdirectory during its search, the subdirec‐
tory pointed to by the symbolic link will be searched.
When the -L option is in effect, the -type predicate will always
match against the type of the file that a symbolic link points
to rather than the link itself (unless the symbolic link is bro‐
ken). Using -L causes the -lname and -ilname predicates always
to return false.
Entonces prueba esto:
find -L /var/www/ -type l
Esto probablemente funcionará: encontré en la find
página de manual este diamante: si estás usando la -type
opción, debes cambiarla a la -xtype
opción:
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.
Entonces:
find -L /var/www/ -xtype l
Un comando, sin tuberías
find . -type l -ls
Explicación: find
desde el directorio actual .
en adelante todas las referencias de -type l
tinta y enumerarlas -ls
en detalle. Simple y llanamente...
Ampliando esta respuesta, aquí hay un par de find
comandos más relacionados con enlaces simbólicos:
Encuentre enlaces simbólicos a un objetivo específico
find . -lname link_target
Tenga en cuenta que link_target
es un patrón que puede contener caracteres comodín.
Encuentra enlaces simbólicos rotos
find -L . -type l -ls
La -L
opción indica find
seguir enlaces simbólicos, a menos que estén rotos.
Buscar y reemplazar enlaces simbólicos rotos
find -L . -type l -delete -exec ln -s new_target {} \;
Más ejemplos de búsqueda
find
Puede encontrar más ejemplos aquí: https://hamwaves.com/find/
Para ver solo los enlaces simbólicos, puedes usar
find -L /path/to/dir/ -xtype l
mientras que si desea ver también a qué archivos se dirigen, simplemente agregue un ls
find -L /path/to/dir/ -xtype l -exec ls -al {} \;