A) これにより、すべての*.JPG
合計*.flac
ファイルが再帰的に出力されます。
$ find . -type f -name "*.JPG" -o -name "*.flac"
Output includes: 1 JPG document and 254 flac documents
B)これにより、*.flac
ファイルは再帰的にのみ出力されます。
$ find . -type f -name "*.flac"
Output includes: 218 flac documents
*.flac
両方のコマンドでリストされているすべてのファイルは、各コマンドとまったく同じ数のファイルと一致すると仮定します。唯一の違いは、最初のコマンドがすべての*.JPG
* .flacファイルの上に含まれることです。そうですか?完全なものではなく。 iTunesユーザーなら、おそらく@eadir
カタログに精通しているでしょう。驚くべきことに、最初のコマンドには*.flac
これらのディレクトリのファイル@eadir
(36*.flac
ファイル)も含まれますが、2番目のコマンドには含まれません。
これらの2つのコマンドが同じファイル形式で異なる結果を返すのはなぜですか?
答え1
find . -type f -name "*.JPG" -o -name "*.flac"
-o
次のいずれかの条件に一致するファイルを見つけます()。
-type f
名前が.JPG
()()で終わる一般的なファイル-name "*.JPG"
。- 文書(どんなタイプ
.flac
)名前が()で終わる人です-name "*.flac"
。
find . -type f -name "*.JPG" -o -name "*.flac"
find . \( -type f -name "*.JPG" \) -o \( -name "*.flac" \)
より正式な用語で連結(「and」を意味)は演算子(「or」を-o
意味)よりも密接に結合されます。
この@eadir
ディレクトリには明らかに非正規ファイル、おそらくシンボリックリンクが含まれています。最初のコマンドでは返されたが2番目のコマンドでは返されなかったファイルは.flac
通常のファイルではありません。次のコマンドを使用して、彼らが何をしているかを確認できます。
find . ! -type f -name "*.flac" -exec ls -ld {} +