3

Как я могу использовать одну единственную команду ls для отображения всех символических ссылок в моем каталоге /dev ?

Я знаю ls -l и это все.

2 ответа2

8

Обычный способ сделать это - использовать find , если он доступен. С помощью GNU find (и, возможно, других) вы можете сделать:

find /dev -type l -ls

где условие -type l говорит о совпадении только символических ссылок. Это даст вам вывод как (копирование всего несколько строк здесь):

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

Вы можете заменить действие -ls на любое, что вы предпочитаете (например, -print и -exec могут оказаться полезными).

Кроме этого, я полагаю, вы могли бы использовать что-то вроде ls -l /dev/disk/by-id | grep ^l , но парсинг вывода ls вообще плохая идея.

0

ls -l | grep ^ l

Создайте полный список и выберите.

Другое предлагаемое решение (find /dev -type l -ls) может быть более эффективным, поскольку оно не выводит полный список, но вызывает многократно ls, поэтому оно может быть менее эффективным. Я бы поспорил менее эффективно, но также «grep» ОЧЕНЬ полезен, и каждый должен понимать 'command | grep XXX ".

Вы можете использовать find и вызывать 'ls' только один раз, но это становится более сложным ... используя xargs или backticks

ls -l `find /dev -type l`

или может быть что-то вроде

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

но это слишком уродливо для начинающих (-L 99 не идеален, но я не вижу, как сделать все аргументы).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .