私は似たようなことをしたい:
$ convert [a,b,c,d,e].png -resize 50% <current_match>_half.png
どうすればいいですか?現在、一致を保存する変数はありますか?ドキュメントに何も見つかりませんが、間違ったキーワードを探している可能性があります。
たぶん私がこれができると思ったがxargs
、私もそれを知ることはできない。
ベストアンサー1
ImageMagickツールにはワイルドカード機能が制限されています。複数のファイル名またはリテラルワイルドカードを渡すと、シーケンス番号付き出力ファイルが生成されます。例:
convert [a-e].png -resize 50% half.png
などを作成しますhalf-0.png
。half-1.png
入力ファイル名を一致させるには、convert
ループ内で明示的にまたはツールを介して一度に1つずつ呼び出す必要があります。 (または後でファイルの名前を変更することはできますが、そうしても何の利点もありません。)ループ内でzshを使用できます。ファイル名の操作または文字列演算構造。
for i in [a-e].png; do
convert $i -resize 50% %{i:t}_half.png
done
これをスクリプトで使用している場合は、追加する必要があります。N
グローバル予選これにより、一致するファイルがない場合は、ワイルドカードパターンが空白に拡張されます。for i in [a-e].png(N); do …
Zshには、パターンに応じてファイル名を変更するツールが付属しています。zmv
。他の名前ベースの変換に使用できます。
autoload -U zmv
zmv -p convert -o '-resize 50%' '([a-e]).png' '${1}_half.png'
これらの名前パターンを作成する他の方法は次のとおりです。
zmv -p convert -o '-resize 50%' '([a-e])(.png)' '${1}_half$2'
zmv -p convert -o '-resize 50%' -w '[a-e].png' '${1}_half.png'
zmv -p convert -o '-resize 50%' '[a-e].png' '${f:t}_half.png'
エイリアスを作成して次のものを追加できます.zshrc
。
autoload -U zmv
alias zcp='zmv -C'
alias zln='zmv -L'
alias zconvert='zmv -p convert'
convert
下のラッパーは、すべてのオプションを内部引用符で渡す必要がある要件を排除するため、上記のエイリアスよりも少し優れています。オプションを渡す場合は、zmv
すべてのオプションの前に来る必要がありますconvert
。
zconvert () {
typeset -a zmv_options=
while [[ $1 = -[finqQsvwW] ]]; do
zmv_options+=($1)
done
zmv -p convert $zmv_options -o "$@[1,-3]" $@[-2] $@[-1]
}