幅または高さが300ピクセル未満のサブフォルダーを持つフォルダー内のすべてのJPG画像を検索しようとしています。
この方法で、古いサムネイルを検出して削除したいです。
確かにfind
を使用してすべての画像を見つけることができます:
find . -iname "*.jpg" -type f | ...
しかし、パイプの後には何が続きますか?写真の属性を検出するためにどのパッケージを使用できますか?
identify
から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
へのパイピング)が必要な場合は、awk
ステートメントの$line
を$3
に変更するだけで、3番目の行。
これは私のために働いた:
find . -iname "*.png" -type f -exec identify -format '%i %wx%h\n' '{}' \; | grep '75x75'
これは出力サンプルです:
./2520161636481000.png 75x75
./2620160819191100.png 75x75
./2420181545550700.png 75x75
受け入れられた答えは非常に良いと思いますが、私は別の可能な解決策を追加したかった...
私は現在ImageMagick
ツールを最も頻繁に使用していますが、netpbm
は画像処理の古くからの友人です。次のコマンドを使用して、任意の形式の画像のサイズを確認できます。
anytopnm file | pamfile
これにより、次のような出力が生成されます。
stdin: PPM raw, 1650 by 1275 maxval 255
「パイプの後に続くもの」の質問に答えるために、xargs
を使用するよりも頻繁にwhile read
を使用します。質問に対する私の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
なしで実行する価値は、あなたが保持したいものを見つけられない-そうでなければ削除する前にプロンプトを表示しません)。