【问题标题】:Bash script qpdf to split multiple pdfs in 1 directoryBash脚本qpdf在1个目录中拆分多个pdf
【发布时间】:2021-08-27 21:36:27
【问题描述】:

我编写了一个简单的 bash 脚本,因为我需要定期将多个 pdf 拆分为 2 个 pdf。我需要每次都以相同的顺序拆分它们(第 1-5 页和第 6 页到最后一页)。我需要对新拆分的 pdf 进行唯一命名,以便将它们分开(即 inv-1.pdf rec-1.pdf;inv-2.pdf rec-2.pdf 等)。我的脚本仅在文件夹中有 5 个以上时才拆分 1 个 pdf。任何建议表示赞赏。

    #!/bin/bash
    for file in $(ls REQ*.pdf)

    do
        qpdf ${file} --pages . 1-5 -- inv-%d.pdf |\
        qpdf ${file} --pages . 6-z -- rec-%d.pdf |\
        echo >> ${file}
    done

'''

【问题讨论】:

  • 我建议你通过shellcheck检查你的脚本...
  • 还有一个有用的调试技术来查看循环是否发生:在第一行 qpdf 之前,插入一个 echo ${file} ...

标签: linux ubuntu qpdf


【解决方案1】:

快速解决方案:将| xargs echo 附加到您的ls 命令中。

    #!/bin/bash
    for file in $(ls REQ*.pdf | xargs echo)

    do
        qpdf ${file} --pages . 1-5 -- inv-%d.pdf |\
        qpdf ${file} --pages . 6-z -- rec-%d.pdf |\
        echo >> ${file}
    done

基本原理:在您的情况下,ls 输出是每行一个文件名。您的 for 循环仅在同一行中获取文件名。其余的被忽略。您可以在此答案上阅读有关ls 输出行为的更多信息-What is the magic separator between filenames in ls output?

管道 (|) 将 ls 输出重定向到 xargs,这将应用 echo 在单行上生成以空格分隔的文件名。 在man page 上阅读有关xargs 的更多信息

【讨论】:

  • @tink 尝试了您的建议,谢谢!它仍然只能将 1 个文件分成 2 个 pdf。该循环不适用于文件夹中超过 1 个 REQ 文件。
  • 试过你的建议,谢谢!它仍然只能将 1 个文件分成 2 个 pdf。该循环不适用于文件夹中超过 1 个 REQ 文件。
  • 是不是顺便把所有的输出文件都命名为同名?那将是覆盖的情况。您可以尝试在循环内增加索引变量并在输出文件名中使用此变量。
  • 不,我认为它只是为 1 个文件创建拆分 pdf。如何在循环内增加索引变量?我重写了代码以尝试 qpdf --empty --pages "${file}" 1-5 -- inv-%d.pdf 但我仍然只得到文件夹中所有 pdf 的 1 个文件输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多