Una línea ls comando para mostrar enlaces simbólicos

3

¿Cómo puedo usar un solo lscomando para mostrar todos los enlaces simbólicos en mi /devdirectorio?

Lo sé ls -ly eso es todo.

Jurgen Malinao
fuente

Respuestas:

8

La forma normal de hacer esto sería usar find, si está disponible. Con GNU find (y posiblemente otros), puede hacer:

find /dev -type l -ls

donde la -type lcondición dice que coinciden solo con enlaces simbólicos. Esto le dará salida como (copiando solo unas pocas líneas aquí):

1971    0 lrwxrwxrwx   1 root     root           10 Mar 25 19:29 /dev/disk/by-uuid/593596f4-a5a1-4e87-b985-b0196c2a067b -> ../../sda3
1952    0 lrwxrwxrwx   1 root     root           10 Mar 25 19:31 /dev/disk/by-uuid/7db08eaf-1d68-4aa3-a8e0-7e62489efb0f -> ../../sdb1
1933    0 lrwxrwxrwx   1 root     root           10 Mar 25 19:29 /dev/disk/by-uuid/a2d18bff-a710-43a8-b41a-fb39b814a165 -> ../../sda1
4209    0 lrwxrwxrwx   1 root     root           10 Mar 26 08:22 /dev/disk/by-path/pci-0000:00:12.2-usb-0:3:1.0-scsi-0:0:0:0-part1 -> ../../sdc1

Puede reemplazar la -lsacción con lo que prefiera ( -printy -execque le parezca útil).

Aparte de eso, supongo que podría usar algo como ls -l /dev/disk/by-id | grep ^l, pero analizar la salida de ls generalmente es una mala idea .

un CVn
fuente
0

ls -l | grep ^ l

Genere una lista completa y seleccione.

La otra solución ofrecida (find / dev -type l -ls) podría ser más eficiente ya que no hace la lista completa, pero invoca 'ls' varias veces, por lo que puede ser menos eficiente. Apuesto a que es menos eficiente, pero también 'grep' es MUY útil y todos deberían entender 'comando | grep XXX ".

Puede usar find y solo invocar 'ls' una vez, pero se vuelve más complicado ... usando xargs o backticks

ls -l `find /dev -type l`

o tal vez algo como

find /dev -type l -print0 | xargs -0 -L99 ls -l

pero es demasiado feo para principiantes (-L 99 no es ideal, pero no veo cómo hacer todos los argumentos).

9mjb
fuente
Otra forma de ejecutar lsuna sola vez: find /dev -type l -exec ls -l {} +.
pabouk
find ... -lsno invoca el lsbinario en absoluto. Como prueba, intente algo como strace find . -ls 2>&1 | grep lsy observe el hecho de que no hay lsinvocaciones antes de que se imprima la salida. ( straceimprime todas las llamadas al sistema realizadas por una aplicación, comenzando en su propia llamada para ejecutar el comando dado). Ahora, algo similar a find ... -exec ls '{}' ';'(y posiblemente incluso +, dependiendo del número de archivos involucrados) es diferente, pero eso no es lo que de que estas hablando
un CVn