Однострочная команда ls для отображения символических ссылок

3

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

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

Юрген Малинао
источник

Ответы:

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, как правило, плохая идея .

CVn
источник
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 не идеален, но я не вижу, как сделать все аргументы).

9mjb
источник
Другой способ запуска lsтолько один раз find /dev -type l -exec ls -l {} +.
Пабук
find ... -lsне вызывает lsдвоичный файл вообще. Для доказательства попробуйте что-то вроде strace find . -ls 2>&1 | grep lsи обратите внимание на тот факт, что lsдо вывода на печать нет вызовов ( straceпечатает все системные вызовы, сделанные приложением, начиная с его собственного вызова для выполнения данной команды.) Теперь, что-то вроде find ... -exec ls '{}' ';'(и, возможно, даже в +зависимости от количества задействованных файлов) отличается, но это не то, что Вы говорите о.
CVn