在脚本中正确使用ps2pdf?

时间:2012-09-10 18:27:46

标签: linux bash scripting ghostscript

我下面有一个脚本,我遇到了问题。我有几个包含PostScript文件的文件夹,我想批量转换为PDF。我之前在linux上做过很少的脚本,但我认为这很接近。虽然我想要它并不是很有效。有什么建议吗?或者发现我犯的错误?我希望文件在转换后保留在同一位置。目前,这会转换文件,但它们会全部放在一个文件夹中。

我这样调用脚本:./ all.ps.to.pdf“/ directory / to / process”

#!/bin/sh

STARTDIR=$1
if [ ! -d "$STARTDIR" ]; then
echo No starting directory $STARTDIR
exit 1
fi

find $STARTDIR -name '*.ps' -print | sed -e 's/.ps$//' |
xargs -l -i  ps2pdf \{}.ps

4 个答案:

答案 0 :(得分:2)

明确地给它输出PDF输出文件名:

find $STARTDIR -name '*.ps' -print | sed -e 's/.ps$//' | xargs -l -i  ps2pdf '{}.ps' '{}.pdf'

答案 1 :(得分:2)

这是一个解决方案:

find $STARTDIR -name '*.ps' -print |
while read filename
do
  ps2pdf ${filename} ${filename%.ps}.pdf
done

答案 2 :(得分:1)

  

注意我犯了一个错误?

Yessss,先生。

您的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阅读眼睛“更好”......)。

答案 3 :(得分:0)

for i `find $STARTDIR -name '*.ps'` ; do ps2pdf $i $i.ps.pdf ; done