.git
次のファイルとディレクトリを含むディレクトリがあります。
.
├── .git
│ ├── branches
│ ├── COMMIT_EDITMSG
│ ├── packed-refs
│ └── refs
├── readme.md
├── server_build.sh
└── tags
testfind
を介してGNUコマンドを実行すると、ディレクトリ「d」が印刷されます。-prune
find
prune
% 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' -prune
trueになりません。
最初のステートメントに暗黙的なスイッチが追加されていますか?
つまり、ターンを探してください。
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