Как я могу использовать только одну ls
команду для отображения всех символических ссылок в моем /dev
каталоге?
Я знаю, ls -l
и это все.
Как я могу использовать только одну ls
команду для отображения всех символических ссылок в моем /dev
каталоге?
Я знаю, ls -l
и это все.
Ответы:
Обычный способ сделать это будет использовать 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, как правило, плохая идея .
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 не идеален, но я не вижу, как сделать все аргументы).
find ... -ls
не вызывает ls
двоичный файл вообще. Для доказательства попробуйте что-то вроде strace find . -ls 2>&1 | grep ls
и обратите внимание на тот факт, что ls
до вывода на печать нет вызовов ( strace
печатает все системные вызовы, сделанные приложением, начиная с его собственного вызова для выполнения данной команды.) Теперь, что-то вроде find ... -exec ls '{}' ';'
(и, возможно, даже в +
зависимости от количества задействованных файлов) отличается, но это не то, что Вы говорите о.
ls
только один разfind /dev -type l -exec ls -l {} +
.