GNU は -print を使って論理演算子を探します。

GNU は -print を使って論理演算子を探します。

次のファイルレイアウトを検討してください。

.
├── 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 \)到達できません。-printdir_a

  • file_1

    dir_aFind は切り取るため、考慮しないため印刷されません。

  • file_2

    テストが-name一致しないので\( -name dir_a -prune \)false で、Find が-printデフォルトに達します。

答え2

あなたの表現は実際には次のとおりです。

(切り捨て dir_a と一致しますが、何もしません) または (他のすべての項目を印刷)

左側の内容を印刷するには、角かっこ内に-printを含める必要があります。

関連情報