Cómo enumerar todos los enlaces simbólicos de un directorio

Tengo un vínculo simbólico en mi /var/www/ directorio que enlaza con WordPress. Cuando ejecuto el comando ls -la desde el /var/www/ directorio el enlace a WordPress no aparece. ¿Hay alguna forma de enumerar todos los enlaces simbólicos que se encuentran en un directorio?

Analizar ls es un Mala Idea®, prefiero un simple find en ese caso:

find . -type l -ls

Para procesar solo el directorio actual:

find . -maxdepth 1 -type l -ls

Crédito: ¿Cómo hago para que el shell reconozca los nombres de archivo devueltos por un comando` ls-A', y estos nombres contienen espacios?

Puedes usar grep con ls comando para listar todos los enlaces simbólicos presentes en el directorio actual.

Esto mostrará una lista de todos los enlaces presentes en el directorio actual.

ls -la /var/www/ | grep "\->"

grep es tu amigo:

ls -lhaF | grep ^l   # list linksls -lhaF | grep ^d   # list directoriesls -lhaF | grep ^-   # list files

Esto mostrará una lista de líneas que comienzan con " l " que representan enlaces en la columna permanentes en lugar de l utilizar d para directorios y - para archivos

POSIXly:

find ! -name . -prune -type l

Esto devuelve todos los elementos enlazados simbólicamente (tanto dir como fn) en un directorio:

find . -maxdepth 1 -type l -print | cut -c3- | grep -v "\#"

Sin embargo, para distinguir entre los tipos de elementos enlazados simbólicamente reales:

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep -v "/" | cut -d' ' -f1

Devuelve solo elementos de nombre de archivo enlazados simbólicamente. Y,

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep "/" | cut -d' ' -f1

Devuelve solo elementos de nombre de directorio enlazados simbólicamente.

Para ver los vínculos simbólicos de un directorio:

  1. Abra una terminal y muévase a ese directorio.

  2. Escriba el comando:

    ls -la

    Esto hará una lista larga de todos los archivos en el directorio, incluso si están ocultos.

  3. Los archivos que comienzan con l son sus archivos de enlace simbólico.

Tipo ls -lai, enumerará todos los archivos y subdirectorios con los números de inodo correspondientes.Usted sabe que los archivos con el mismo número de inodo son los enlaces (duros o blandos) y esta solución también funciona para los enlaces simbólicos.

También se puede hacer con Python:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /path/to/dir

Ejecución de muestra:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /etc/etc/vtrgb/etc/printcap/etc/resolv.conf/etc/os-release/etc/mtab/etc/localtime

Esto se puede extender para que sea recursivo a través de os.walk función, pero es suficiente usar la generación de listas simples para enumerar enlaces en un solo directorio como lo mostré anteriormente.

Amablemente, encuentre a continuación un comando de script bash de línea para encontrar todos los enlaces simbólicos rotos de forma recursiva en cualquier sistema operativo basado en Linux

b=$(find / -type l); for i in $(echo $b); do file $i ; done |grep -i broken 2> /dev/null

uso de zsh

ls -l *(@)lrwxrwxrwx 1 david david 15 Nov 18 22:35 gvimrc -> /etc/vim/gvimrclrwxrwxrwx 1 david david 13 Nov 18 22:19 mydomains.php -> mydomains.php