動かざることバグの如し

近づきたいよ 君の理想に

Linuxで特定の解像度以外の画像を探して全削除するコマンド

やりたいこと

Linux環境で、特定のディレクトリ以下の幅が1350ピクセルでないまたは高さが600ピクセルでないすべてのPNG画像ファイルを削除したい

ファイル名ならfind駆使すれば一発だが、解像度となると画像のメタデータを読まないといけないので厄介

解決策

やっぱりImageMagickを使う

コマンド

find . -type f -iname "*.png" -exec identify -format '%w %h %i\n' {} \; | awk '$1 != 1350 || $2 != 600 {print $3}' | xargs rm

このLinuxコマンドは、現在のディレクトリ(.)とそのすべてのサブディレクトリから、ファイルのみ(-type f)を検索し、ファイル名が.pngであるものだけを選択します(-iname "*.png")。

そして、identifyコマンドを使って、各PNG画像ファイルの幅、高さ、およびファイル名を表示します(-exec identify -format '%w %h %i\n' {} \;)。

この情報は、スペースで区切られた3つの値を含む1行になります。

そして、awkコマンドを使用して、幅が1350ピクセルでない、または高さが600ピクセルでないすべての行について、そのファイル名を表示します($1 != 1350 || $2 != 600 {print $3})。

xargsとrmコマンドを使用して、これらのファイルを削除します。

逆に指定した解像度のときだけ削除したい場合は?

==使えばいい

awk '$1 == 1350 && $2 == 600 {print $3}'

最後に

削除は自己責任で