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
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:
Abra una terminal y muévase a ese directorio.
-
Escriba el comando:
ls -la
Esto hará una lista larga de todos los archivos en el directorio, incluso si están ocultos.
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