linux命令用数字排序合并pdf文件

我正在尝试编写一个bash脚本来将目录中的所有pdf文件合并到一个pdf文件中。 命令pdfunite *.pdf output.pdf成功实现了这个功能,但它按照常规顺序合并输入文档:

1.pdf 10.pdf 11.pdf 2.pdf 3.pdf 4.pdf 5.pdf 6.pdf 7.pdf 8.pdf 9.pdf

而我希望文件按数字顺序合并:

1.pdf 2.pdf 3.pdf 4.pdf 5.pdf 6.pdf 7.pdf 8.pdf 9.pdf 10.pdf 11.pdf

我想一个混合ls -vsort -npdfunite可以做到这一点,但我不知道如何组合它们。 任何想法如何我可以合并pdf文件与数字排序?

非常感谢您的帮助


你可以使用$()嵌入命令的结果,所以你可以做下面的事情

$ pdfunite $(ls -v *.pdf) output.pdf

要么

$ pdfunite $(ls *.pdf | sort -n) output.pdf

但是,请注意,当文件名包含特殊字符(如空格)时,这不起作用。

在这种情况下,您可以执行以下操作:

ls -v *.txt | bash -c 'IFS=$'"'"'n'"'"' read -d "" -ra x;pdfunite "${x[@]}" output.pdf'

虽然看起来有点复杂,但它恰恰相结合

  • Bash:将制表符分隔的文件行读取到数组中
  • 构建包含空白的参数列表
  • 如何在单引号字符串中跳过单引号?
  • 请注意,您不能使用xargs因为pdfunite需要输入pdf作为参数的中间值。 我避免使用readarray因为它在旧的bash版本中不受支持,但是您可以使用它而不是IFS=.. read -ra ..如果您有更新的bash


    通过多个步骤来完成。 我假设你有从1到99的文件。

     pdfunite $(find ./ -regex ".*[^0-9][0-9][^0-9].*"  | sort) out1.pdf
     pdfunite out1.pdf $(find ./ -regex ".*[^0-9]1[0-9][^0-9].*"  | sort) out2.pdf
     pdfunite out2.pdf $(find ./ -regex ".*[^0-9]2[0-9][^0-9].*"  | sort) out3.pdf
    

    等等。

    最终文件将包含您的所有pdf数字顺序。

    ! 小心写输出文件,如out1.pdf等,否则pdfunite会覆盖最后一个文件!

    编辑:对不起,我错过了每个正则表达式中的[^ 0-9]。 在上面的命令中更正它。

    链接地址: http://www.djcxy.com/p/46943.html

    上一篇: linux command merge pdf files with numerical sort

    下一篇: How to merge many PDF files into a single one?