ファイルのリストがあり、必要です。すべての画像ファイルを探すこのリストから。
たとえば、私のリストに次のものが含まれているとします。
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
(-i
MIMEタイプを表示します。これは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
コマンドに加えて、file
ImageMagickを使用することもできます。以下は、現在のディレクトリにあるすべてのファイルの種類を示しています。
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