¿Cómo puedo usar un solo ls
comando para mostrar todos los enlaces simbólicos en mi /dev
directorio?
Lo sé ls -l
y eso es todo.
¿Cómo puedo usar un solo ls
comando para mostrar todos los enlaces simbólicos en mi /dev
directorio?
Lo sé ls -l
y eso es todo.
Respuestas:
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 l
condició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 -ls
acción con lo que prefiera ( -print
y -exec
que 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 .
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).
find ... -ls
no invoca el ls
binario en absoluto. Como prueba, intente algo como strace find . -ls 2>&1 | grep ls
y observe el hecho de que no hay ls
invocaciones antes de que se imprima la salida. ( strace
imprime 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
ls
una sola vez:find /dev -type l -exec ls -l {} +
.