パターンに一致するディレクトリ内のすべての画像を回転させたい。
これまでのところ:
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ですべての画像を回転させるためのより良いワンライナー
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
ls
を解析しないでください。ls
はここでは必要ありません。さらに、スペースが含まれている場合は、変数を引用符で囲む必要があります。
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
Imagemagicソリューションではありませんが、
sips -r 90 *.JPG
.JPGで終わるすべての画像を90度回転します。それは良いワンライナーです。
このコードをコピーしてubuntuに貼り付け、「rotate.sh」として保存できます
#!/bin/bash -e
CUR_DIR=`pwd`
cd "${1}"
for file in *.jpg; do
convert "${file}" -rotate 90 "${file}";
done
cd CUR_DIR
このファイルを保存した後、./rotate.sh folder_containing_images
を使用してターミナルから実行します
ファイルを$file
として参照する必要がありました。
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 $file+'_rotated'.JPG
done