2012-09-10 26 views
3

我有一个脚本下面,我有问题。我有几个文件夹中的PostScript文件,我想批量转换为PDF文件。我之前在linux中做过很少的脚本,但我认为这很接近。虽然我不太想工作。任何暗示?或者注意到我犯了一个错误?我希望这些文件在转换后保留在同一位置。目前这转换文件,但他们把所有放在一起在一个文件夹中。在脚本中正确使用ps2pdf?

我所说的脚本是这样的:./all.ps.to.pdf “/目录/至/进程”

#!/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 
+0

您的'find'命令应该全部在一行中。或者,如果你想分发两行,使用'\'作为行延续符号(它必须是第一行的最后一个字符,没有任何空格后面的!) –

+0

@KurtPfeifle - if“|”是该行的最后一个标记,您不需要行连续字符:“\” –

回答

1

通知一个错误我犯了?

叶斯爵士。

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

2

只要给它明确的PDF输出文件名:

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

什么版本的'xargs'将'{}'作为参数? –

+0

大多数Linux xargs; '-i'表示使用'{}'作为替换的字符串。 – nneonneo

+0

很酷。我学到了东西。 –

2

这里是一个解决方案:

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

这对Mac OS X最适合我。 –

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