8

ディレクトリ内のすべての画像のリストのサイズを変更したいと思います。それを達成するために、私はconvertimagemagickから使用します。リサイズしたい

image1.jpg
image2.jpg
...

の中へ

image1-resized.jpg
image2-resized.jpg
...

単一のコマンドラインでこれを達成する方法があるかどうか疑問に思っていました. この場合だけでなく、洗練されたソリューションが役立つことがよくあります。

編集:

スクリプトに似ていない ソリューション、つまり. forループなし。

4

4 に答える 4

10

サイズを 800x600 に変更する場合:

for file in *.jpg; do convert -resize 800x600 -- "$file" "${file%%.jpg}-resized.jpg"; done

(bashで動作します)

于 2009-02-18T16:51:21.200 に答える
8
ls *.jpg|sed -e 's/\..*//'|xargs -I X convert X.jpg whatever-options X-resized.jpg

「image1-resized.jpg」の代わりに「resized-image1.jpg」というわずかに異なる最終ファイル名を受け入れたい場合は、sed を削除して拡張機能を汎用にすることができます。

ls|xargs -I X convert X whatever-options resized-X
于 2009-02-18T17:06:23.957 に答える
5

GNU Parallelは for ループよりもさらに簡単で、多くの場合高速です。

parallel convert -resize 800x600 -- "{}" "{.}-resized.jpg" ::: *.jpg

ここでは、右から左にいくつかのことが行われています。

  • ::: *.jpgすべてのjpgファイルに対してコマンドを実行することを意味します
  • {.}サフィックスなしで現在のファイル名を挿入することを意味します ( .jpg)
  • {}現在のファイル名を挿入することを意味します
  • parallelは、次のコマンドを並行して何度も実行することを意味します。コンピューターのコア数に合わせて、並列で実行する最大数が選択されます。それぞれが終了すると、すべての jpg ファイルが変換されるまで次のファイルが起動されます。

convert --resize 800x600 -- foo.jpg foo-resized.jpgこれにより、各ファイルに対してコマンドが実行されます。ファイル名が --たまたま.-

PS私のMacにはHomebrewがインストールされているので、並列にインストールして変換することができました

brew install parallel
brew install imagemagick
于 2015-05-22T15:27:20.667 に答える
2

画像ファイルの拡張子が異なる場合:

*のfの場合; do convert -resize 800x600 -- "$f" "${f%.*}-resized.${f##*.}"; 終わり
于 2009-02-18T17:04:26.880 に答える