回答:
identify
from を使用imagemagick
でき、次のコマンドを使用できます。
find . -iname "*.jpg" -type f -exec identify -format '%w %h %i' '{}' \; | awk '$1<300 || $2<300'
を使用-exec <command> '{}' \;
すると、ファイル名にスペースを含めることができますが、代わりに
find . -iname "*.jpg" -type f | xargs -I{} identify -format '%w %h %i' {} | awk '$1<300 || $2<300'
ここで-I{}
同じことを処理します。
私が気に入っているのidentify
は、出力形式を指定できることです。この場合'%w %h %i'
、画像の幅、高さ、およびフルパス名を提供します。次に、awk
式は、イメージが目的のサイズよりも小さい行のみを保持します。
出力の例:
64 64 ./thumbsup.jpg
100 150 ./photomin.jpg
編集:あなたはファイル名のみ(への配管にしたい場合はrm
、たとえば)、単に変更$line
でawk
の声明$3
、それが唯一の3列目が印刷されます。
'%w %h %i\n'
)を追加して、それを機能させる必要がありました。
| xargs -I {} mv {} /destination/directory/
受け入れられた答えは非常に良いと思いますが、私は別の可能な解決策を追加したかった...
ImageMagick
現在、私はツールを最も頻繁に使用していますnetpbm
が、画像処理の古くからの友人です。次のコマンドを使用して、任意の形式の画像のサイズを確認できます。
anytopnm file | pamfile
これにより、次のような出力が生成されます。
stdin: PPM raw, 1650 by 1275 maxval 255
「パイプの後に続くもの」の質問に答えるために、私はより柔軟であるためwhile read
、使用するよりも頻繁に使用しますxargs
。netpbm
質問に対する私の答えは次のようになります。
find -iname \*.jpg | while read img; do \
anytopnm "$img" | pamfile | \
perl -ane 'exit 1 if $F[3]<300 || $F[5]<300' || rm -v "$img"; \
done
パッケージidentify
からのコマンドimagemagick
はあなたが望むことをします:
$ identify abc.jpg
abc.jpg JPEG 1952x3264 1952x3264+0+0 8-bit DirectClass 1.111MB 0.000u 0:00.000
この場合もgrep
、画像サイズの整理に使用する必要があります。
ただし、画像サイズの範囲が非常に広い場合を除きfind
、特定のサイズ以下のJPEGファイルを削除するために使用する方が簡単だと思われます。
find -iname '*.jpg' -size -10k -delete
(-delete
チェックするために最初に実行する価値は、あなたが保持したいものを見つけられない-それ以外の場合は削除する前にプロンプトを表示しません)。
| awk '$1<300||$2<300'
または| awk '$1<300||$2<300{print $3}'
(3列目のみが必要な場合)。