ファイルのリストを取得するためにシンボリックリンクでフィルタリングする(次にそのリストでアクションを実行する方法)ターゲットシンボリックリンク名の代わりに名前がありますか?たとえば、次のリストでは最初の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
。どちらにしてもこれを行うことができます。