`find -type l`はファイルと一致しますが、`-type l -o -type f`は一致しませんが、明示的な `-print`だけを使用します。

`find -type l`はファイルと一致しますが、`-type l -o -type f`は一致しませんが、明示的な `-print`だけを使用します。

私はGNUを使用していますfind

このシェルセッションで問題を軽減しました。

$ mkdir t
$ cd t
$ touch a 
$ ln -s a b
$ find -type l
./b
$ find -type l -o -type f
./a
./b
$ find -type l -print
./b
$ find -type l -o -type f -print
./a

眠くなるかもしれませんが、私には理解できない2つのことがあります。

  • いいえtrue OR false == true?一致しますが、追加すると一致が停止しますが、-o -type f何が起こっていますか?find./b-type l
  • マニュアルページにはこれが-print基本式であることが示されていますが、言及されていない場合はファイルを印刷し、言及されていない場合は省略するのはなぜですか?

これは(私が実際に必要なもの)を使用するときにも発生します-printf。他の表現も影響を受けると思います。

答え1

存在する

find -type l -o -type f -print

ジョブを指定したため、デフォルト値は適用されなくなりました。ただし、これは「および」が「または」より優先順位が高いためです-printf-type f

find \( -type l \) -o \( -type f -print \)

リンクとファイルを同じ方法で処理するには、テストをグループ化する必要があります。

find \( -type l -o -type f \) -print

関連情報