私のGNU findutils(FSF 2015)は次のように言います。
-prune
True;
if the file is a directory, do not descend into it.
If -depth is given, false; no effect.
Because -delete implies -depth, you cannot usefully use -prune and -delete together.
そしてPosix:
-prune
The primary shall always evaluate as true;
it shall cause find not to descend the current pathname if it is a directory.
If the -depth primary is specified, the -prune primary shall have no effect.
改行文字のみ変更しました。注目すべき2つの点は次のとおりです。
-prune
これは主演を完全に無視するのではないか?つまり、左側の式を「収集」し、残りは-o
右側の式に残します。連結式ですか?
GNUのマニュアルページを見ると、少なくとも1つの例が表示されます。
-name pattern
Base of ...
...
...
To ignore a directory and the files under it, use -prune;
see an example in the description of -path.
...
さて、ここに簡単な例がありますfind . EXPR -prune -o -print
。これは自然に質問を提起する。なぜfind .
何も印刷するのですか?
振り返ってみると整理もうまくいっているのはすべてありました。
今関連の質問:
-prune
これら2つの解釈(GNUとPOSIX)はどのような関係がありますか?
私の考えでは、posixは退屈な技術リストと有用なヒントを持っていて、何の理由もなく専門用語に変えたようです。これは誤解を招くかもしれません。
最終的に、両方の説明は次のような質問を残すからです。
Afterが常にtrueを返す場合、なぜ-o
Afterが必要なのですか?-prune
以下はテストされた例です。スキップしたいマウントポイントがあり、ramdisk "0"(ゼロ)もスキップしたい "test"を含むすべてのファイルを一覧表示したいと思います。
find . -xdev -name "0" -prune -o -name '*test*'
このように動作し、./0
実際に非常に興味深い行も含まれています。
prune-o-trickがない場合は明示的-print
。
答え1
-prune
これは主演を完全に無視するのではないか?つまり、左側の式を「収集」し、残りは-o
右側の式に残します。連結式ですか?
いいえ、彼らはそれを無視しません。これはsの影響はまったくありませんが、s演算子の優先順位の結果であるためです-prune
。find
find . EXPR -prune -o -print
等しい
find . \( EXPR -prune \) -o -print
-prune
EXPR
本当かどうかを評価します。EXPR
false の場合-prune
は評価されず、複合式は false と評価されます。EXPR
true の場合は-prune
常に true なので、複合式は true と評価されます。これらすべての結果は、何でも-print
偽の場合にのみ評価されるということです。EXPR
-prune
find . -xdev -name "0" -prune -o -name '*test*'
次の規則に従って、印刷と./0
さまざまな一致が表示されます(マンページ引用)。*test*
完全な式に
-prune
または他の操作が含まれていない場合、完全な式
On では0
true-name "0" -prune
と評価され、印刷されます。
この規則は、これらの動作が発生する理由も説明しますfind .
。
GNUとPOSIXの解釈は同じです。
- "true; "match" 基本は常に true と評価する必要があります。
- 「ファイルがディレクトリの場合はそのファイルに入らないでください。」は、「ディレクトリの場合、findは現在のパス名から降りないようになります」と一致します。
- 「-deep を指定した場合、-prune は効果がありません。」は、「-length masternode が指定されている場合は、-prune masternode は効果がありません」と一致します。
(引用する改訂されたfind
文書)。
-prune
必ずしも従う必要はなく、-o
これを説明するいくつかの例があります。POSIX ドキュメントfind
。このトリックは、find
現在のディレクトリの即時コンテンツを制限するのに特に役立ちます。
find . ! -name . -prune -print