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

问题描述 投票:0回答:3

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

gm mogrify -大小 150x150 *.png -调整大小 150x150 +配置文件“*”“%f-thumbnail.png”

有什么办法可以做到这一点吗?

graphicsmagick
3个回答
5
投票

我不知道是否有办法指定 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;

我更喜欢第一种方法;)


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

0
投票

还有一种更简单的使用 xargs 的方法:

ls *.jpg | xargs -I{} sh -c 'gm convert -resize 150x150 {} +profile "*" ./$(basename {} .png)-converted.jpg'
© www.soinside.com 2019 - 2024. All rights reserved.