シンボリックリンクを表示する1行のlsコマンド


3

1つの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の出力を解析することは悪い考えです。


0

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は理想的ではありませんが、すべての引数を実行する方法がわかりません)。


ls度だけ実行する別の方法:find /dev -type l -exec ls -l {} +
パブーク

find ... -lslsバイナリをまったく呼び出しません。証拠として、次のようなものを試して、出力が印刷される前に呼び出しstrace find . -ls 2>&1 | grep lsがないことを確認してくださいls。(strace与えられたコマンドを実行するために独自のコールで始まり、アプリケーションによって行われたすべてのシステムコールを出力します。)さて、の線に沿って何かfind ... -exec ls '{}' ';'(そしておそらくはとし+、関連するファイルの数に応じて)が異なっているが、それは何ではありませんあなたが話している。
CVn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.