linux command merge pdf files with numerical sort
I am trying to write a bash script to merge all pdf files of a directory into one single pdf file. The command pdfunite *.pdf output.pdf
successfully achieves this but it merges the input documents in a regular order:
1.pdf 10.pdf 11.pdf 2.pdf 3.pdf 4.pdf 5.pdf 6.pdf 7.pdf 8.pdf 9.pdf
while I'd like the documents to be merged in a numerical order:
1.pdf 2.pdf 3.pdf 4.pdf 5.pdf 6.pdf 7.pdf 8.pdf 9.pdf 10.pdf 11.pdf
I guess a command mixing ls -v
or sort -n
and pdfunite
would do the trick but I don't know how to combine them. Any idea on how I could merge pdf files with a numerical sort?
Thank you very much for any help
you can embed the result of command using $()
, so you can do following
$ pdfunite $(ls -v *.pdf) output.pdf
or
$ pdfunite $(ls *.pdf | sort -n) output.pdf
However, note that this does not work when filename contains special character such as whitespace.
In the case you can do the following:
ls -v *.txt | bash -c 'IFS=$'"'"'n'"'"' read -d "" -ra x;pdfunite "${x[@]}" output.pdf'
Although it seems a little bit complicated, its just combination of
Note that you cannot use xargs
since pdfunite
requires input pdf's as the middle of arguments. I avoided using readarray
since it is not supported in older bash version, but you can use it instead of IFS=.. read -ra ..
if you have newer bash
.
Do it in multiple steps. I am assuming you have files from 1 to 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
and so on.
the final file will consist of all your pdfs in numerical order.
!!! Beware of writing the output file such as out1.pdf etc. otherwise pdfunite will overwrite the last file !!!
Edit: Sorry I was missing the [^0-9] in each regex. Corrected it in the above commands.
链接地址: http://www.djcxy.com/p/46944.html上一篇: 如何将多个PDF页面加入单个页面
下一篇: linux命令用数字排序合并pdf文件