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

97

Tengo un enlace simbólico en mi directorio /var/www/ que enlaza con WordPress. Cuando ejecuto el comando ls -la desde el directorio /var/www/ , el enlace a WordPress no aparece. ¿Hay alguna manera de enumerar todos los enlaces simbólicos que están en un directorio?

    
pregunta wisaac407 09.09.2014 - 19:56

8 respuestas

58

Puede usar el comando grep con ls para mostrar 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 "\->"
    
respondido por el g_p 09.09.2014 - 20:02
185

El análisis de ls es un mala idea ® , prefiere un find simple en ese caso:

find . -type l -ls

Solo procesar el directorio actual:

find . -maxdepth 1 -type l -ls

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

    
respondido por el Sylvain Pineau 09.09.2014 - 20:21
8

el comando ls -la muestra todos los archivos y carpetas y también el directorio simbólico vinculado, si este comando no muestra ningún directorio simbólico significa que no tiene un enlace simbólico a WordPress .

vea el resultado de ejecutar ls -la :

[email protected]:~$ cd /sys/devices/platform/sony-laptop
[email protected]:/sys/devices/platform/sony-laptop$ ls -la
total 0
drwxr-xr-x  3 root root    0 Sep  9 19:57 .
drwxr-xr-x 14 root root    0 Sep 10  2014 ..
-r--r--r--  1 root root 4096 Sep  9 22:32 battery_care_health
-rw-r--r--  1 root root 4096 Sep  9 22:32 battery_care_limiter
lrwxrwxrwx  1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
-r--r--r--  1 root root 4096 Sep  9 22:32 modalias
drwxr-xr-x  2 root root    0 Sep  9 22:32 power
lrwxrwxrwx  1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
-rw-r--r--  1 root root 4096 Sep  9 22:32 touchpad
-rw-r--r--  1 root root 4096 Sep  9 19:57 uevent

Verá que todo el directorio simbólico tiene el permiso l al inicio de los indicadores de permisos. y si toma un grep con ^l , puede listar solo archivos simbólicos o directorio:

[email protected]:/sys/devices/platform/sony-laptop$ ls -la |grep ^l
lrwxrwxrwx 1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
lrwxrwxrwx 1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
[email protected]:/sys/devices/platform/sony-laptop$ 
El

controlador y el subsistema son enlaces simbólicos a otros directorios aquí.

    
respondido por el αғsнιη 09.09.2014 - 20:32
3

POSIXly:

find ! -name . -prune -type l
    
respondido por el cuonglm 09.09.2014 - 20:24
3

grep es tu amigo:

ls -lhaF | grep ^l   # list links
ls -lhaF | grep ^d   # list directories
ls -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 use d para directorios y - para archivos

    
respondido por el Kalibur 08.10.2015 - 12:22
0

Escriba ls -lai , listará todos los archivos y subdirectorios con los correspondientes números de inodos. Sabrá 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.

    
respondido por el saptarshi nag 09.09.2014 - 20:18
0

Para ver los enlaces simbólicos en un directorio:

  1. Abra una terminal y vaya a ese directorio.

  2. Escriba el comando:

    ls -la
    

    Esto incluirá 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ólicos.

respondido por el sandeep srivastav vaddiparthy 10.09.2014 - 07:43
0

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 la función os.walk , pero es suficiente usar la generación simple de listas para enumerar los enlaces en un único directorio como lo mostré anteriormente.

    
respondido por el Sergiy Kolodyazhnyy 09.01.2017 - 12:15

Lea otras preguntas en las etiquetas