回答:
identifyfrom を使用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列目のみが必要な場合)。