パターンに一致するディレクトリ内のすべての画像を回転させたい。
これまで私は以下を持っています:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
しかし、これは出力を提供しませんか?
答え1
mogrify -rotate 90 *.jpg
すべての画像を回転させるためのより良いOne-Linerイメージマジック
mogrify -rotate 90 /tmp/p/DSC*.JPG
.JPG
実際に次に始まるディレクトリ内のすべてのエントリを回転させます。DSC
p
モグリフィ(imagemagickの一部)Convert
は元のファイルを変更するのと同じではありませんhttp://www.imagemagick.org/script/mogrify.php
答え2
コードには多くの問題があります。まず、lsを解析しています。悪い考え。指摘したように、変数も引用しなければならず、$file
空白のために壊れないように引用もしなければなりません。宣言しましたが、num
使用しませんでした。より安全なアプローチは次のとおりです。
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
ファイルに改行が含まれている場合はまだ問題が発生しますが、パスにスペースが含まれていると少なくとも問題は発生しません。
ファイルがすべて同じディレクトリにある場合は、ワイルドカードを使用してさらに簡素化できます。パラメータ拡張を使用してfoo_rotated.JPG1
代わりに生成することもできますfoo.JPG_rotated.JPG
。
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done
答え3
PE(パラメータ拡張)を使用する簡単な方法は次のとおりです。
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
答え4
imagemagicソリューションではありませんが、
sips -r 90 *.JPG
.JPGで終わるすべての画像は90度回転します。これは素晴らしい1つのライナーです。