やりたいこと
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}'
最後に
削除は自己責任で