他の "-or"テストが適用されたときにGNUが-prune'dディレクトリの印刷が抑制されることを発見するのはなぜですか? [コピー]

他の

.git次のファイルとディレクトリを含むディレクトリがあります。

.
├── .git
│   ├── branches
│   ├── COMMIT_EDITMSG
│   ├── packed-refs
│   └── refs
├── readme.md
├── server_build.sh
└── tags

testfindを介してGNUコマンドを実行すると、ディレクトリ「d」が印刷されます。-prunefindprune

% find . -name '.git' -prune
./.git

別のORオプションを追加すると、クリーンアップされたディレクトリは出力に表示されなくなります。

% find . -name '.git' -prune -o -name '*.md' -print
./readme.md

この場合、-name '.git'AND-name '*.md'テストはすべてtrueを返す必要があり、他のORテストを追加すると、突然テストは-name '.git' -prunetrueになりません。
最初のステートメントに暗黙的なスイッチが追加されていますか?
つまり、ターンを探してください。

find . -name '.git' -prune

入力する

find . -name '.git' -prune -print

実行時に?-print次のテストを追加すると暗黙的にキャンセルされますか?他の "-or"テストを適用しても
-prunedディレクトリが印刷されないのはなぜですか?find

ベストアンサー1

find . -name '.git' -prune

同じですか?

find . -name '.git' -prune -print

だから切り取り、印刷します。

find . -name '.git' -prune -o -name '*.md' -print

同じですか?

find . \( -name '.git' -prune -true \) -o \( -name '*.md' -print \)

そのため、最初の句を実行し、トリミングを実行するとtrueを実行し(ポイントはtrueを返します)、右側の句は実行しません。-o

常に印刷されます。

find . \( -name '.git' -prune -o -name '*.md' \) -print
find . -name '.git' -prune -print -o -name '*.md' -print

おすすめ記事