コンテンツ別に画像ファイルを見つける方法

コンテンツ別に画像ファイルを見つける方法

ファイルのリストがあり、必要です。すべての画像ファイルを探すこのリストから。

たとえば、私のリストに次のものが含まれているとします。

pidgin.tar.gz
photo01.jpg
picture01
screenshot.gif
invoice.pdf

それから、次を選択したいと思います。

photo01.jpg
picture01
screenshot.gif

メモ:

  • メソッドはファイル拡張子に依存してはいけません。
  • PhotoshopとGimpのぼやけた画像形式は無視できます。 (feh表示できない場合は画像ではありません。)

答え1

次のコマンドは、list_fileイメージファイル名を含む行を一覧表示します。

<list_file xargs -d \\n file -i | sed -n 's!: *image/[^ :]*$!!p'
  • file -i FOOフォーマットを決定するために、最初の数バイトを報告して1行をFOO印刷しますFOO: image/jpeg-iMIMEタイプを表示します。これはLinuxのGNUファイルにのみ適用されます)。
  • xargs -d \\n標準入力からファイルのリスト(1行に1つ)を読み、後続のコマンドを適用します。 (これにはLinuxでGNU xargsが必要です。他のシステムでは省略されますが、-d \\nファイルリストに\'"スペースを含めることはできません。)
  • このsedコマンドはサフィックスをフィルタリングし、: image/FOOファイル名のみを表示します。イメージファイルに対応しない行は無視されます。

答え2

file -ib image | awk '"^image/" {print}'

ファイルが画像を検出したら、次の行を印刷する必要があります。

image/jpeg; charset=binary

マジックナンバーで動作するため、拡張に基づいていません。それ

答え3

コマンドに加えて、fileImageMagickを使用することもできます。以下は、現在のディレクトリにあるすべてのファイルの種類を示しています。

find -type f -depth 0 -print0 | xargs -0 identify

このidentifyコマンドは、さまざまなファイル形式に対して以下を印刷します。

text.txt[8] TXT 612x792 612x792+0+0 16-bit DirectClass 694B 0.320u 0:00.330
php.jpg[31] JPEG 1280x1024 1280x1024+0+0 8-bit DirectClass 195KB 0.000u 0:00.000

アニメーションGIFファイルはより多くの情報を印刷します(21フレームGIF)。

adhd.gif[0] GIF 211x200 211x200+0+0 8-bit PseudoClass 256c 233KB 0.000u 0:00.029
adhd.gif[1] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.029
adhd.gif[2] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.029
...
adhd.gif[18] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.000
adhd.gif[19] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.000
adhd.gif[20] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.000

awkその後、同様のツールを使用して何をするかを決定できます。

答え4

たぶん私が何かを逃したかもしれませんが、これは私に効果があるようです。

file -i * | grep "image/" | cut -d: -f1

関連情報