我正在尝试编写一个 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
or sort -n
and pdfunite
可以解决问题,但我不知道如何将它们结合起来。
关于如何合并 pdf 文件的任何想法用数字排序?
您可以使用嵌入命令的结果$()
,
所以你可以执行以下操作
$ pdfunite $(ls -v *.pdf) output.pdf
or
$ pdfunite $(ls *.pdf | sort -n) output.pdf
但是,请注意,当文件名包含特殊字符(例如空格)时,这不起作用。
在这种情况下,您可以执行以下操作:
ls -v *.txt | bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" output.pdf'
虽然看起来有点复杂,但它只是组合
- Bash:将制表符分隔的文件行读入数组 https://stackoverflow.com/questions/9736202/bash-read-file-line-into-array
- 构建包含空格的参数列表 https://stackoverflow.com/questions/411495/build-argument-lists-containing-whitespace
- 如何转义单引号字符串中的单引号? https://stackoverflow.com/questions/1250079/escaping-single-quotes-within-single-quoted-strings
请注意,您不能使用xargs
since pdfunite
需要输入 pdf 作为参数的中间。
我避免使用readarray
因为旧的 bash 版本不支持它,但你可以使用它来代替IFS=.. read -ra ..
如果你有更新的bash
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)