web-dev-qa-db-ja.com

無効な画像を見つけることができますか?

サブディレクトリを持つディレクトリがあります。ディレクトリには、Webからクロールされた画像がたくさんあります。

どのようにしてすべてのファイルをループして、無効なイメージファイルではないファイルを表示しますか?

ファイル拡張子に基づいてはいけません。

私はこのスクリプトを思い付きました:

find . -name '*.jpg' -o -name '*.jpeg' -o -name '*.gif' -o -name '*.png' | while read FILE; do
    if ! identify "$FILE" &> /dev/null; then
         echo "$FILE"
    fi  
done
 _

しかし、これは貴重な画像を出力するため、機能していません。

1
user1315960

ファイルタイプのシグネチャをチェックすることでこれを行う必要があります。これを見つけることができます こちら 、またはあなたのファイルの確認エラーでそれを見つけることができます。

たとえば、JPGシグネチャはFF D8 FF E0です。つまり、最初の4バイトはFF D8 FF E0に等しくなければなりません。

必要なのは、これらのバイトをファイルのものと一致させるためのツールがあります。例として、hexdump -n 4 -C file.jpg| awk '{print $2 $3 $4 $5}'は、それらのバイトを16進形式で返します。これは、希望の署名と比較できます。

壊れた画像ファイルが壊れている可能性がある場合は、ファイルシグネチャとリカバリに関する高度な情報が見つかります ここ 。たとえば、画像のほんの一部のみがダウンロードされている場合。

0
Neyman