同様の find コマンドを使用して、「@eadir」ディレクトリを一貫して読みません。

同様の find コマンドを使用して、「@eadir」ディレクトリを一貫して読みません。

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 {} +

関連情報