パターンに一致するディレクトリ内のすべての画像を回転させたい。
これまでのところ:
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
ファイルに改行が含まれている場合でも問題は発生しますが、パスにスペースが含まれている場合でも少なくとも問題は発生しません。
ファイルがすべて同じディレクトリにある場合は、globbingを使用してさらに簡略化できます。パラメータ展開を使用して、foo_rotated.JPG1
を作成することもできます。 foo.JPG_rotated.JPG
の代わりに :
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done