Answers:
您的代码有很多问题。首先,您正在解析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
mogrify -rotate 90 *.jpg
更好的One-Liner,可使用imagemagick旋转所有图像
mogrify -rotate 90 /tmp/p/DSC*.JPG
将INFACT旋转所有.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
original_filename.JPG_rotated.JPG"
。添加"${file%.JPG}"_rotated.JPG
会更合适的恕我直言。干杯!