回答:
これを行う通常の方法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」も非常に有用であり、誰もが「コマンド| grep XXX」。
findを使用して 'ls'を1回だけ呼び出すことができますが、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 {} +
。