-prune
主は伝えfind
ディレクトリの下に再帰しません。
find -L -path ~/.wine/dosdevices -prune -o -type f -name 'My Favorite Movie.*' -print
あなたが使用したい場合は-lname
、あなたの条件に、あなたが使用することはできません-L
ので、オプションを-L
原因ほとんどの述語を含む、リンクのターゲットに作用します-lname
。その場合の私の推奨は、検索のルートとしてホームディレクトリとハードディスクのルートの両方を使用することです。
find ~ /mnt/hdd -xtype f -name 'My Favorite Movie.*'
実行find ~ -type l …
して、シンボリックリンクのリストを収集し、それらを追加のルートとして使用することができます。
( IFS=$'\n'; set -f;
find ~ $(find ~ -type l -lname '/mnt/hdd/*') \
-xtype f -name 'My Favorite Movie.*' )
シンボリックリンクで本当に再帰する場合は、名前ではなくターゲットで特定のシンボリックリンクを除外できます。ただし、この方法では、パターンやサブツリーではなく、有限リストのみを除外できます。
find -L \( -samefile /exclude/this -o -samefile ~/and/that \) -prune -o \
-type f -name 'My Favorite Movie.*' -print
! -writable
(書き込み権限のないファイル)などの他の基準を使用できますが、ターゲットテキストが特定の式に一致する場合にのみ、GNU findがシンボリックリンクで再帰する方法はないと思います。
find
シンボリックリンクを十分に除外しないことを除いて、ほぼ望みどおりのコマンドを作成し、find2perlを実行してクエリをPerlスクリプトに変換し、Perlスクリプトを少し調整します。ただし、find2perlが認識しないGNU findのスイッチは多数あります。
-prune
まさに私が探していたものです。私がfind ~ \( -lname ~ -o -lname ~/\* -o -lname / \) -xtype d
フォローしたくないすべてのシンボリックリンクがリストされていることがわかりました。私は今、そのクエリを使用してプルーニングする方法を見つけようとしています。