パターンに一致するディレクトリ内のすべての画像を回転させたい。
これまでのところ:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
しかし、それは出力を与えませんか?
パターンに一致するディレクトリ内のすべての画像を回転させたい。
これまでのところ:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
しかし、それは出力を与えませんか?
回答:
コードにはかなりの数の問題があります。まず第一に、あなたは悪い考えである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
mogrify -rotate 90 *.jpg
imagemagickで
すべての画像を回転させるための優れたOne-Liner
mogrify -rotate 90 /tmp/p/DSC*.JPG
ディレクトリ内で.JPG
始まる
すべてを事実上回転させますDSC
p
Mogrify(imagemagickの一部)はConvert
、元のファイルhttp://www.imagemagick.org/script/mogrify.phpを変更する
点が異なります
PE(パラメータ拡張)を使用した簡単な方法は
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
bash
そこには特別なものは何もないことに注意してください、それは完全に標準的なPOSIX sh構文です。
解析されませんls
し、ls
ここでは必要ありません。さらに、変数にスペースが含まれる場合は、変数を引用符で囲む必要があります。
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
Imagemagicソリューションではありませんが、
sips -r 90 *.JPG
.JPGで終わるすべての画像を90度回転します。良いライナーです。
ファイルをとして参照する必要がありました$file
。つまり、
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 $file+'_rotated'.JPG
done
original_filename.JPG_rotated.JPG"
。追加"${file%.JPG}"_rotated.JPG
する方がより適切です。乾杯!