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

Respuestas:

80

Puede usar grepcon el lscomando para enumerar todos los enlaces simbólicos presentes en el directorio actual.

Esto enumerará todos los enlaces presentes en el directorio actual.

ls -la /var/www/ | grep "\->"
g_p
fuente
55
Devolverá falso positivo si tiene un archivo que contiene " ->". Pruebe un simpletouch "foo->"
Sylvain Pineau
77
no copie y pegue el contenido de otra respuesta a su propia respuesta. -1
αғsнιη
3
¿por qué no greping con ^l?
Eliran Malka
3
Como de costumbre, la mejor respuesta es la que tiene el + más alto
FractalSpace
¡Agradable! → .bash_alias: alias listlinks='ls -l --color | grep "\->"'8-)
Frank Nocke
285

El análisis lses una mala idea ® , prefiera una simple finden ese caso:

find . -type l -ls

Para procesar solo el directorio actual:

find . -maxdepth 1 -type l -ls

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

Sylvain Pineau
fuente
find: Unknown argument to -type: 1
ahnbizcad
15
@ahnbizcad: No es 1(uno) sino l(enlace)
Sylvain Pineau
3
¡Gran respuesta! Ajusté el mío para no descender por la ruta del directorio de esta manera: ¡ find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null Gracias!
bgs
3
Solo para el directorio actual (es decir, no recursivo ) agregar -maxdepth 1.
Joshua Pinter
1
@ cig0 no necesitas usar awk, probablemente solo quieres esto:find . -maxdepth 1 -type l | sort -n
sobi3ch
10

el ls -lacomando 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 .

ver el resultado de la ejecución ls -la:

kasiya@kasiya-pc:~$ cd /sys/devices/platform/sony-laptop
kasiya@kasiya-pc:/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 lpermiso al inicio de las banderas de permisos. y si toma un grep ^lpuede enumerar solo archivos simbólicos o directorios:

kasiya@kasiya-pc:/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
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ 

El controlador y el directorio del subsistema son un enlace simbólico a otro directorio aquí.

αғsнιη
fuente
1
Especificación menor aquí ... el primer carácter de la cadena de permisos no es realmente un permiso. Es el tipo de archivo. Como has dicho, lsignifica que es un enlace simbólico.
conner.xyz
5

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 de permisos en lugar de luso dpara directorios y -archivos

Kalibur
fuente
3

POSIXY:

find ! -name . -prune -type l
Cuonglm
fuente
1

Para ver los enlaces simbólicos en un directorio:

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

  2. Escribe el comando:

    ls -la
    

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

  3. Los archivos que comienzan lson sus archivos de enlace simbólico.

sandeep srivastav vaddiparthy
fuente
1
-1: la respuesta de KasiyA ya cubre esto.
muru
1

Esto devuelve todos los elementos vinculados simbólicamente (tanto dirs como fns) en un directorio:

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

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

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

Solo devuelve elementos de nombre de archivo vinculados simbólicamente. Y,

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

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

odoncaoa
fuente
0

Escriba 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 (hard o soft) y esta solución también funciona para los enlaces simbólicos.

saptarshi nag
fuente
ls -laino no mostrar el mismo número de inodo de un archivo y sus enlaces simbólicos. A diferencia de los enlaces duros, los enlaces simbólicos tienen sus propias entradas de inodo separadas. Esto es lo que parece.
Eliah Kagan
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 os.walkfunción, pero es suficiente usar una generación de lista simple para enumerar enlaces en un solo directorio como lo mostré anteriormente.

Sergiy Kolodyazhnyy
fuente