シンボリックリンク宛先別にファイルを一覧表示

シンボリックリンク宛先別にファイルを一覧表示

ファイルのリストを取得するためにシンボリックリンクでフィルタリングする(次にそのリストでアクションを実行する方法)ターゲットシンボリックリンク名の代わりに名前がありますか?たとえば、次のリストでは最初の4つのファイル(ターゲットを含む)にのみ興味がありますbar

foo ->  /tmp/bar
bar ->  /home/me/bartoo
baz ->  /home/me/public/barthree
zoo ->  /usr/share/bar
moo ->  /tmp/foo
roc ->  /tmp/roc

ベストアンサー1

findを使用して、シンボリックリンクタイプのすべてのファイルをインポートし、リンク先の名前-ilnameで検索するオプションを追加できます。これは-inameリンク名の代わりにリンク先名のように機能します。

find -type l -ilname "*bar*"

これはまだ対象ではないリンクの名前を印刷します。宛先の名前を印刷するには、次のようにします。

find -type l -ilname "*bar*" -printf "%l\n"

または、フルlsスタイルの出力を取得します。

find -type l -ilname "*bar*" -ls

はい、意味は」リストで何かをする「わかりませんが、リンクされたファイルに対して操作を実行したい場合は、パラメータを使用して次のことを見つけることが-execできます。

find -type l -ilname "*bar*" -exec touch {} \;

ただし、リンク先で作業する必要がある場合は、を-printf使用して宛先値を取得し、いくつかのxargsループを実行して直接実行する必要があります。次のことができます。

find -type l -printf "%l\n" | grep bar | xargs touch

grep...これはまた、代わりにを使用して名前の一致を実行する方法を示していますfind -ilname。どちらにしてもこれを行うことができます。

おすすめ記事