我想转换一组文件,但不覆盖现有文件。如何使用 mogrify 来指定最终文件格式?例如,firstpic.png -> firstpic-thumbnail.png、secondpic.png -> secondarypic-thumbnail.png 等
gm mogrify -大小 150x150 *.png -调整大小 150x150 +配置文件“*”“%f-thumbnail.png”
有什么办法可以做到这一点吗?
我不知道是否有办法指定 mogrify 的输出文件格式,但我会使用
convert
和简单的 bash 循环来代替:
for f in *.jpg;
do
convert "$f" -resize 150x150 +profile "*" "${f%.jpg}-thumbnail.jpg";
done;
或者,如果您确实想使用
mogrify
,您可以使用-output-directory
(更多有关此选项的信息)将新文件放入单独的目录中,然后进行重命名:
mkdir tmp;
gm mogrify -output-directory tmp -size 150x150 -resize 150x150 +profile "" "*.jpg";
for f in tmp/*.jpg;
do
mv "$f" "${f%.jpg}-thumbnail.jpg";
done;
mv tmp/* .;
rm -rf tmp;
我更喜欢第一种方法;)
如果输出格式(扩展名)与输入格式不同,文件不会被覆盖。如果它们相同,您可以使用这个技巧,这使得它们为此目的看起来“不同”,但实际上是相同的,但在扩展名的情况下有所不同:
gm mogrify -resize 150x150 -format PNG +profile "*" *.png
编辑:
除了指定不同的目录或不同的扩展名之外,我不知道“mogrify”中有什么工具可以重命名输出文件。所以fragphace的答案是正确的;您将需要使用脚本来重命名它们。结合我的回答:
gm mogrify -resize 150x150 -format PNG +profile "*" *.png
for file in *.PNG
do
basename=`echo $file | sed -e "s/.PNG//"`
mv $basename.PNG $basename-thumbnail.png
done
还有一种更简单的使用 xargs 的方法:
ls *.jpg | xargs -I{} sh -c 'gm convert -resize 150x150 {} +profile "*" ./$(basename {} .png)-converted.jpg'