我想旋转目录中与模式匹配的所有图像。
到目前为止我有:
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 度。这是一个很好的单衬。