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 -v
或sort -n
和pdfunite
可以做到这一点,但我不知道如何组合它们。 任何想法如何我可以合并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'
虽然看起来有点复杂,但它恰恰相结合
请注意,您不能使用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