我在一个目录中有很多postscript(.ps
)文件,其名称如
cct@TOP_VMAIN_AND_3V3_SMPS,smps_ota,schematic.ps
我想批量转换为.png
个文件
我已经拥有以下命令(使用bash):
gs -dSAFER -dBATCH -sDEVICE=pnggray -dTextAlphaBits=4 -r300 -sOutputFile=out-%d.png *.ps
这没关系,但很明显,它只输出out-1.png
,out-2.png
等等,这意味着我不知道.png
来自哪个.ps
。
我想要做的是能够保留这样的文件名
cct@TOP_VMAIN_AND_3V3_SMPS,smps_ota,schematic.ps
转换为
cct@TOP_VMAIN_AND_3V3_SMPS,smps_ota,schematic.png
为每个文件。我怎么能这样做?
答案 0 :(得分:1)
使用bash的参数扩展:
f="cct@TOP_VMAIN_AND_3V3_SMPS,smps_ota,schematic.ps"
echo "${f%.*}.png" # Remove everything after the last dot.
答案 1 :(得分:1)
您需要一个循环才能获得单个文件名:
for psf in *.ps; do
pngf="`basename $psf`.png";
gs -dSAFER -dBATCH -sDEVICE=pnggray -dTextAlphaBits=4 -r300 -sOutputFile="$pngf" "$psf"
done
但这是未经测试的。它也慢,特别是对于许多小文件,因为ghostscript一遍又一遍地重新启动。很可能人们可以通过管道将输入输入到后台运行的gs,并通过管道将同一个运行进程的输出重定向到不同的文件,但这似乎很难(我怎么知道呢)那个ghostscript已经完成了一份工作?)并且有点矫枉过正。