3

我在下面有一个脚本,但我遇到了问题。我有几个包含 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

4 回答 4

2

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

find $STARTDIR -name '*.ps' -print | sed -e 's/.ps$//' | xargs -l -i  ps2pdf '{}.ps' '{}.pdf'
于 2012-09-10T19:03:42.083 回答
2

这是一种解决方案:

find $STARTDIR -name '*.ps' -print |
while read filename
do
  ps2pdf ${filename} ${filename%.ps}.pdf
done
于 2012-09-10T19:03:53.020 回答
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 阅读眼睛来说看起来“更好”......)。

于 2012-09-11T06:20:47.927 回答
0
for i `find $STARTDIR -name '*.ps'` ; do ps2pdf $i $i.ps.pdf ; done
于 2012-10-30T14:43:19.650 回答