合并具有数字排序的pdf文件

max*_*max 11 linux pdf sorting bash numeric

我正在尝试编写一个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
Run Code Online (Sandbox Code Playgroud)

虽然我希望文档以数字顺序合并:

1.pdf
2.pdf
3.pdf
4.pdf
5.pdf
6.pdf
7.pdf
8.pdf
9.pdf
10.pdf
11.pdf
Run Code Online (Sandbox Code Playgroud)

我猜命令混合ls -vsort -npdfunite会做的伎俩,但我不知道如何将它们结合起来.关于如何将pdf文件与数字排序合并的任何想法

ymo*_*nad 29

你可以使用命令嵌入结果$(),这样你就可以做到以下几点

$ pdfunite $(ls -v *.pdf) output.pdf
Run Code Online (Sandbox Code Playgroud)

要么

$ pdfunite $(ls *.pdf | sort -n) output.pdf
Run Code Online (Sandbox Code Playgroud)

但请注意,当filename包含特殊字符(如空格)时,这不起作用.

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

ls -v *.txt | bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" output.pdf'
Run Code Online (Sandbox Code Playgroud)

虽然看起来有点复杂,但它只是组合而已

请注意,您不能使用,xargs因为pdfunite需要输入pdf作为参数的中间.我避免使用,readarray因为它在较旧的bash版本中不受支持,但你可以使用它而不是IFS=.. read -ra ..你有更新的版本bash.