在graphicsmagick中,如何在大量文件上指定输出文件?

时间:2014-07-04 15:37:38

标签: graphicsmagick

我想转换一组文件,但不会覆盖现有文件。如何使用mogrify来确定最终文件格式?例如,firstpic.png - > firstpic-thumbnail.png,secondpic.png - > secondpic-thumbnail.png等

gm mogrify -size 150x150 * .png -resize 150x150 + profile“*”“%f-thumbnail.png”

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

我不知道是否有一种方法可以从mogrify指定输出文件格式,但我会使用convert代替简单的bash循环:

for f in *.jpg; 
do 
    convert "$f" -resize 150x150 +profile "*" "${f%.jpg}-thumbnail.jpg"; 
done;

或者,如果您真的想使用mogrify,可以使用-output-directorymore on this option here)将新文件放入单独的目录中,然后负责重命名:

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;

我更喜欢第一种方法;)

答案 1 :(得分:2)

如果输出格式(扩展名)与输入格式不同,则不会覆盖文件。如果它们是相同的,你可以使用这个技巧,使它们看起来“不同”用于此目的但实际上是相同的但是在扩展的情况下不同:

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