Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在脚本中正确使用ps2pdf?_Linux_Bash_Scripting_Ghostscript - Fatal编程技术网

Linux 在脚本中正确使用ps2pdf?

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' -

我有一个脚本下面,我有问题。我有几个文件夹,其中包含PostScript文件,我想批量转换为PDF。我以前很少在linux中编写脚本,但我认为这已经很接近了。不过,它并没有按照我想要的方式工作。有什么建议吗?还是注意到我犯的错误?我希望文件在转换后保持在同一位置。目前,这会转换文件,但它们都放在一个文件夹中

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


只需显式地为其指定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