次のコマンドを実行しています。
mogrify -resize '400x400>' *.png
~によると文書、「幅x高さ>」ジオメトリ(>
with)「対応する幅および/または高さパラメータよりも大きい寸法の画像を縮小します。」
幅/高さが400x400未満の画像は影響を受けないと予想していましたが、mogrifyは明確な理由なしにファイルを書き換えます。変更日とファイルサイズの両方が変更されます。
実際に小さな画像だけを残す方法はありますか?何千もの不要な書き込みを避けたいです。
ベストアンサー1
ファイルが体系的に書き換えられたと思うので、mogrify
唯一の希望はリストを最初にフィルタリングすることです。jippieが提案したもの。次のことができます(テストされていません):サイズマーク付きの画像ファイルのリストを印刷し、範囲内で関連するサイズの名前のみを保持してからリストを処理します。
identify -format '%w %h %i\n' ./*.png |
awk '$1 > 400 || $2 > 400 {sub(/^[^ ]* [^ ]* /, ""); print}' |
tr '\n' '\0' |
xargs -0 mogrify -resize '400x400'
スクリプトの説明:
- 各ファイルの幅、スペース、高さ、スペース、ファイル名を含む行を印刷します。バージョンによっては、
identify
最後の\n
改行を追加する必要があるかもしれません(ImageMagick 6.6.0)、重複しますが無害になるかもしれません(GraphicsMagick 1.1.11)。 - (
awk
)各行の幅($1
)と高さ($2
)が前提条件を満たす場合:- 2 番目の空白文字の前のすべてのテキストを削除します。これにより、幅と高さが削除されます。
- ファイル名である行の残りの部分を印刷します。
- 改行文字を null 文字に置き換えます。
- filenameに対してコマンドを実行するために呼び出されます
xargs -0
。 (プレーンはスペースや埋め込み入力を処理できないためmogrify
使用できません。)xargs
\'"
ファイル名には、改行文字を除く任意の文字を含めることができます。