web-dev-qa-db-ja.com

.jpg拡張子が必須ではないときに、ファイルシステム上のすべてのJPGファイルを見つける方法

WindowsからLinuxに切り替えたときに最初に気付いたのは、Linuxには厳密な命名規則がなく、.bmp、.jpg、.exeなどの必須のファイル名拡張子がないことです。そのため、ファイル名自体ではファイル形式を判別できません。

ファイルシステムのすべてのJPEGファイルに.jpg拡張子が付いている場合、すべてのJPEGファイルを次の方法で簡単に見つけることができます。

find / -type f -name "*.jpg"

しかし、そうでない場合は、すべてのJPEGファイルを見つける方法がわかりません。

8
Abdul Al Hazred

Dirsとsubdirをクロールする場合:

find /home/place/to/crawl -type f -exec file --mime-type {}  \; | awk '{if ($NF == "image/jpeg") print $0 }'

それは何ですか?

  • タイプfileのすべてのiノードを検索
  • コマンドファイルを実行して、ファイルのjpegヘッダーを取得します。例:image/jpeg
  • awk

編集-iでファイルを使用し、ファイルタイプの出力中にMIME文字列標準を使用するために、@ Franklinのヒントを追加しました。これにより、jpeg Wordの誤検知が減少します。

Edit2:@don_crisstiのヒントを追加。 awkを使用して最後の列のみをフィルタリングし、image/jpegと一致する場合は行全体を出力します。文字セット情報を抑制するためにfileスイッチを--mime-typeに変更しました

17
user34720