如何使用一个ps2pdf命令将目录中的所有ps文件转换为pdf?

时间:2019-04-06 17:31:24

标签: linux shell pdf

对于我的一个课程,我需要保存一堆来自模拟器的内存转储和汇编列表。教授建议使用enscript将文件转换为.ps,然后使用ps2pdf将文件转换为.pdf。当我需要执行10个以上的文件时,这可能会很麻烦。有没有一种有效的方法可以使用一个ps2pdf命令(可能还可以使用enscript来执行此操作)?

我知道通配符存在,并且我尝试使用它们。我在弄清楚如何在ps2pdf中使用它们时遇到了麻烦。我尝试过的一件事是ps2pdf *.ps *.pdf,但这没用。

我正在寻找的是一种通过几个快速命令将所有文件转换为.ps然后转换为.pdf的方法,这样我就可以将它们压缩并scp我的本地打印机。

3 个答案:

答案 0 :(得分:2)

for f in *.ps; do
  ps2pdf "$f" "${f%.*}.pdf"
done

答案 1 :(得分:0)

在您展示如何命名汇编程序和内存转储以及如何使用enscript将它们转换为Postscript文件之前,我只能向您展示将Postscript文件转换为PDF的方法。

恕我直言,如果您有许多Postscript文件可转换为PDF,则应使用 GNU Parallel 并快速,轻松地完成所有操作,如下所示:

parallel --dry-run ps2pdf {} {.}.pdf ::: *.ps

示例输出

ps2pdf a.ps a.pdf
ps2pdf b.ps b.pdf

如果您展示了汇编文件和转储文件的命名方式,那么我可以向您展示实现目标的一种更好的方法-也许您可以定义一个函数或脚本,以并行方式很好地完成所有工作,而几乎不需要打字。 ..

答案 2 :(得分:0)

find *.ps -maxdepth 0 -type f | xargs -I{} sh -c 'ps2pdf "$1" "${1%.ps}.pdf"' -- {}

  • 仅当存在包含不需要的.ps文件的子目录时,才需要获取以-type f结尾的文件和常规文件-maxdepth 0.ps受到影响。
  • xargs对每个文件执行一次shell脚本,需要将文件名作为参数{}--传递,以防止进一步的选项处理。
  • sh -c在单引号'...'中执行字符串,$ 1将保存文件名,因为我们将其作为第一个参数传递给它。
  • ${1%.ps}.pdf将从文件名中删除.ps扩展名,并将.pdf添加到文件名。

您没有提供所用enscript的示例,所以我不能肯定地说,这是否行得通。