Linux 在脚本中正确使用ps2pdf?
我有一个脚本下面,我有问题。我有几个文件夹,其中包含PostScript文件,我想批量转换为PDF。我以前很少在linux中编写脚本,但我认为这已经很接近了。不过,它并没有按照我想要的方式工作。有什么建议吗?还是注意到我犯的错误?我希望文件在转换后保持在同一位置。目前,这会转换文件,但它们都放在一个文件夹中 我这样调用脚本:./all.ps.to.pdf“/directory/to/process”Linux 在脚本中正确使用ps2pdf?,linux,bash,scripting,ghostscript,Linux,Bash,Scripting,Ghostscript,我有一个脚本下面,我有问题。我有几个文件夹,其中包含PostScript文件,我想批量转换为PDF。我以前很少在linux中编写脚本,但我认为这已经很接近了。不过,它并没有按照我想要的方式工作。有什么建议吗?还是注意到我犯的错误?我希望文件在转换后保持在同一位置。目前,这会转换文件,但它们都放在一个文件夹中 我这样调用脚本:./all.ps.to.pdf“/directory/to/process” 只需显式地为其指定PDF输出文件名: find $STARTDIR -name '*.ps' -
只需显式地为其指定PDF输出文件名:
find $STARTDIR -name '*.ps' -print | sed -e 's/.ps$//' | xargs -l -i ps2pdf '{}.ps' '{}.pdf'
这里有一个解决方案:
find $STARTDIR -name '*.ps' -print |
while read filename
do
ps2pdf ${filename} ${filename%.ps}.pdf
done
注意到我犯的错误了吗
是的,先生
您的
find
命令应该全部在一行中。或者,如果要将其分散到两行,请使用\
作为行继续符号(必须是第一行的最后一个字符,后面没有空格!)
那就是
- 任用
find $STARTDIR -name '*.ps' -print | sed -e 's/.ps$//' | xargs -l -i ps2pdf \{}.ps
- 或使用
find $STARTDIR -name '*.ps' -print | sed -e 's/.ps$//' | \ xargs -l -i ps2pdf \{}.ps
- 甚至使用
find $STARTDIR -name '*.ps' -print \ | sed -e 's/.ps$//' \ | xargs -l -i ps2pdf \{}.ps
(无论你认为哪个在你的Bash阅读眼睛看来更“好看”…。哪个版本的
xargs
将{}
作为参数?大多数Linux xargs-i
表示使用{}
作为替换字符串。您的find
命令应全部在一行中。或者,如果要将其分布在两行上,请使用``作为行延续符号(必须是第一行的最后一个字符,后面没有空格!)@KurtPfeifle-如果“|”是行的最后一个标记,则不需要行延续字符:\”
find $STARTDIR -name '*.ps' -print \
| sed -e 's/.ps$//' \
| xargs -l -i ps2pdf \{}.ps
for i `find $STARTDIR -name '*.ps'` ; do ps2pdf $i $i.ps.pdf ; done