コマンドラインを使用して特定のピクセルサイズのすべての画像を見つける方法は?


16

幅または高さが300px未満のサブフォルダーを持つフォルダー内のすべてのJPG画像を検索しようとしています。

この方法で、古いサムネイルを検出して削除したいです。

確かに私はを使用してすべての画像を見つけることができますfind

find . -iname "*.jpg" -type f | ...

しかし、パイプの後には何が続きますか?写真の属性を検出するためにどのパッケージを使用できますか?

回答:


17

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、たとえば)、単に変更$lineawkの声明$3、それが唯一の3列目が印刷されます。


3
awk部分は短くすることができます:| awk '$1<300||$2<300'または| awk '$1<300||$2<300{print $3}'(3列目のみが必要な場合)。
har-wradim 14年

@ har-wradimありがとう、素敵な提案!
ゲルハルトバーガー14年

7
改行('%w %h %i\n')を追加して、それを機能させる必要がありました。
-qwr

6年の質問で書いてすみませんが、これは私の質問に部分的に答えるGoogleで見つける唯一の結果です、基本的に私が欲しいのは特定の寸法のまたは特定の寸法内の画像を見つけて別のディレクトリにコピーすることです。cpはコピーに使用されることを知っていますが、このコマンドをcpと統合することに失敗します。
GhostOrder

@GhostOrderは@ har-wradimの提案に従って3番目の列のみを印刷し、次のようなパイプを追加します| xargs -I {} mv {} /destination/directory/
Gerhard Burger

1

受け入れられた答えは非常に良いと思いますが、私は別の可能な解決策を追加したかった...

ImageMagick現在、私はツールを最も頻繁に使用していますnetpbmが、画像処理の古くからの友人です。次のコマンドを使用して、任意の形式の画像のサイズを確認できます。

anytopnm file | pamfile

これにより、次のような出力が生成されます。

stdin:  PPM raw, 1650 by 1275  maxval 255

「パイプの後に続くもの」の質問に答えるために、私はより柔軟であるためwhile read、使用するよりも頻繁に使用しますxargsnetpbm質問に対する私の答えは次のようになります。

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

1

これは私のために働いた:

find . -iname "*.png" -type f -exec identify -format '%i %wx%h\n' '{}' \; | grep '75x75'

これは出力サンプルです:

./2520161636481000.png 75x75

./2620160819191100.png 75x75

./2420181545550700.png 75x75


0

パッケージ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チェックするために最初に実行する価値は、あなたが保持したいものを見つけられない-それ以外の場合は削除する前にプロンプ​​トを表示しません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.