ver soporta sistema simbólicos simbolicos simbolico permiten para los links link fuertes enlaces enlace editar duros directorios directorio crear como comando borrar archivos bash find symlink

bash - soporta - ¿Cómo encuentro todos los enlaces simbólicos en un árbol de directorios?



no se permiten enlaces fuertes para directorios (5)

Un comando, sin tuberías

find . -type l -ls

Simple y simple ...

Ampliando esta respuesta, aquí hay un par más de comandos de find relacionados con el enlace simbólico:

Encuentra enlaces simbólicos a un objetivo específico

find . -lname link_target

Tenga en cuenta que link_target puede contener caracteres comodín.

Encuentra enlaces simbólicos rotos

find -L . -type l -ls

La opción -L indica que find seguir enlaces simbólicos, a menos que se rompa.

Buscar y reemplazar enlaces simbólicos rotos

find -L . -type l -delete -exec ln -s new_target {} /;

Más encontrar ejemplos

Se pueden find más ejemplos de find aquí: http://hamwaves.com/find/

Estoy tratando de encontrar todos los enlaces simbólicos dentro de un árbol de directorios para mi sitio web. Sé que puedo usar find para hacer esto, pero no puedo averiguar cómo consultar los directorios de forma recursiva.

He intentado este comando:

find /var/www/ -type l

... y más tarde descubrí que los contenidos en /var/www son enlaces simbólicos, así que cambié el comando a:

find -L /var/www/ -type l

lleva un tiempo correr, sin embargo, no obtengo ninguna coincidencia.

¿Cómo hago esto para verificar los subdirectorios?


Esto es lo mejor que he encontrado hasta ahora: le muestra los enlaces simbólicos en el directorio actual, recursivamente, pero sin seguirlos, se muestran con rutas completas y otra información:

find ./ -type l -print0 | xargs -0 ls -plah

salidas se ve así:

lrwxrwxrwx 1 apache develop 99 Dec 5 12:49 ./dir/dir2/symlink1 -> /dir3/symlinkTarget lrwxrwxrwx 1 apache develop 81 Jan 10 14:02 ./dir1/dir2/dir4/symlink2 -> /dir5/whatever/symlink2Target etc...


Esto recorrerá de forma recursiva el directorio /path/to/folder y enumerará solo los enlaces simbólicos:

ls -lR /path/to/folder | grep ^l

Si su intención es seguir los enlaces simbólicos también, debe usar su comando find pero debe incluir la opción -L ; de hecho, la página find man 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

Probablemente esto funcione: encontré en la página find man este diamante: si está usando la opción -type , tiene que cambiarla a la opción -xtype :

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


Para ver solo los enlaces simbólicos, puede usar

find -L /path/to/dir/ -xtype l

mientras que si quieres ver también a qué archivos se dirigen, solo agrega un ls

find -L /path/to/dir/ -xtype l -exec ls -al {} /;


find ya ve de manera recursiva por defecto:

[15:21:53 ~]$ mkdir foo [15:22:28 ~]$ cd foo [15:22:31 ~/foo]$ mkdir bar [15:22:35 ~/foo]$ cd bar [15:22:36 ~/foo/bar]$ ln -s ../foo abc [15:22:40 ~/foo/bar]$ cd .. [15:22:47 ~/foo]$ ln -s foo abc [15:22:52 ~/foo]$ find ./ -type l .//abc .//bar/abc [15:22:57 ~/foo]$