Merge pdf files with numerical sort

后端 未结 3 1328
轮回少年
轮回少年 2021-02-04 12:40

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

3条回答
  •  温柔的废话
    2021-02-04 12:45

    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

    • Bash: Read tab-separated file line into array
    • build argument lists containing whitespace
    • How to escape single-quotes within single-quoted strings?

    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.

提交回复
热议问题