次のファイルレイアウトを検討してください。
.
├── dir_a
│ └── file_1
└── file_2
移動する
find . \( -name dir_a -prune \) -a -print
与えられた
./dir_a
しかし引用する
find . \( -name dir_a -prune \) -o -print
与えられた
./file_2
論理OR(-o)に論理AND(-a)の結果が含まれないのはなぜですか?
答え1
~から仕様を探す(GNU検索マニュアル同様のフレーズがあります):
表現-o 表現
基本シフトまたは演算子。 最初の式がtrueの場合、2番目の式を評価しないでください。
dir_a
-name
一致し、-prune
常にtrueなので、Findはに\( -name dir_a -prune \)
到達できません。-print
dir_a
file_1
dir_a
Find は切り取るため、考慮しないため印刷されません。file_2
テストが
-name
一致しないので\( -name dir_a -prune \)
false で、Find が-print
デフォルトに達します。
答え2
あなたの表現は実際には次のとおりです。
(切り捨て dir_a と一致しますが、何もしません) または (他のすべての項目を印刷)
左側の内容を印刷するには、角かっこ内に-printを含める必要があります。