首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash:如何像输入文件一样命名gs输出文件,但使用不同的文件扩展名?

Bash:如何像输入文件一样命名gs输出文件,但使用不同的文件扩展名?
EN

Stack Overflow用户
提问于 2015-10-02 17:39:33
回答 2查看 517关注 0票数 2

我在一个目录中有许多postscript (.ps)文件,其名称如下

代码语言:javascript
复制
cct@TOP_VMAIN_AND_3V3_SMPS,smps_ota,schematic.ps 

我想批量转换成.png文件

我已经有了以下命令(使用bash):

代码语言:javascript
复制
gs -dSAFER -dBATCH -sDEVICE=pnggray -dTextAlphaBits=4 -r300 -sOutputFile=out-%d.png *.ps

这是可以的,但是,很明显,它只输出out-1.pngout-2.png等等,这意味着我不知道哪个.png来自哪个.ps

我想要做的是能够保留文件名,以便

代码语言:javascript
复制
cct@TOP_VMAIN_AND_3V3_SMPS,smps_ota,schematic.ps 

被转换为

代码语言:javascript
复制
cct@TOP_VMAIN_AND_3V3_SMPS,smps_ota,schematic.png

对于每个文件。我该怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2015-10-02 17:44:14

使用bash的参数扩展:

代码语言:javascript
复制
f="cct@TOP_VMAIN_AND_3V3_SMPS,smps_ota,schematic.ps"
echo "${f%.*}.png"  # Remove everything after the last dot.
票数 1
EN

Stack Overflow用户

发布于 2015-10-02 17:52:03

您需要一个循环,以便获得单个文件名:

代码语言:javascript
复制
for psf in *.ps; do 
    pngf="`basename $psf`.png"; 
    gs -dSAFER -dBATCH -sDEVICE=pnggray -dTextAlphaBits=4 -r300 -sOutputFile="$pngf" "$psf"
done

不过,这是未经测试的。它也很慢,特别是对于许多小文件,因为ghostscript会一次又一次地重启。可以通过管道将输入提供给在后台运行的gs,并通过管道将同一运行进程的输出重定向到不同的文件,但这似乎很困难(我如何判断ghostscript已经完成了一个作业?)和过度杀伤力。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32904468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档