【问题标题】:Combine PDFs with spaces in file names将 PDF 与文件名中的空格结合起来
【发布时间】:2020-07-06 17:34:54
【问题描述】:

我有一个目录,其中包含许多文件名中有空格的 PDF。

file 1.pdf
file 2.pdf
file 3.pdf
# And so on

我在那个目录中运行了这个命令。

pdftk `ls -v` cat output combined-report.pdf

但是终端吐出一堆这样的错误。

Error: Unable to find file.
Error: Failed to open PDF file: 
   file
Error: Unable to find file.
Error: Failed to open PDF file: 
   1.pdf

如何使用 pdftk 或 Arch Linux 中的任何其他软件包合并 PDF?为了澄清,我想按照ls -v打印的顺序组合文件

【问题讨论】:

标签: linux unix pdf pdftk


【解决方案1】:

在创建组合 pdf 时只需使用通配符,例如:

pdftk *.pdf cat output newfile.pdf

或者你可以使用这样的东西:

pdftk file\ 1.pdf file\ 2.pdf cat output newfile.pdf

【讨论】:

  • 不,因为命令组合 PDF 的顺序类似于“1、10、11、12...”而不是“1、2、3...”。我编辑了我的问题以澄清
  • 然后,您可以编写一个小的 bash 脚本,在该脚本中迭代该目录中的文件...我可以为您完成...但我不太了解 bash。祝你好运。 ;)
【解决方案2】:

试试这个:

find . -name 'file*.pdf' -print0 | sort -z -V | xargs -0 -I{} pdftk {} cat output combined-report.pdf

或者这个:

ls -v file*.pdf | xargs -d'\n' -I{} pdftk {} cat output combined-report.pdf

在第一行,“-print0”、“-z”和“-0”告诉相应的命令使用null作为分隔符。排序的“-V”参数指定“版本排序”,我认为它应该产生你想要的排序。通常,通过管道传输的参数会附加到 xargs 的末尾。 “-I{}”指定一个占位符“{}”,您可以使用它将它们放在命令的中间。

第二行类似,只是它从“ls”中获取参数,并使用换行符'\n'作为分隔符。

注意:使用“ls”存在潜在问题。请参阅@stephen-p 发布的链接。

【讨论】:

  • 在这两种情况下,代码都会创建一个 PDF,它是目录中最后一个 PDF 的副本。
  • @Username 尝试将“.pdf”更改为仅匹配您的输入文件。例如file.pdf 如您的示例所示。否则,通配符扩展还将包括在同一目录中创建的 combine-report.pdf。
  • 在我上次的评论中没有意识到星号变成了斜体的标记。我编辑了答案以更准确地输入文件名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多