Aqui está um pequeno script simples que itera todos os arquivos pdf no diretório atual e os concatena em um único PDF, usando o LaTeX. PDFs com um número ímpar de páginas terão uma página extra em branco após eles:
#!/bin/bash
cat<<EoF > all.tex
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
EoF
## rename the PDFs to something safe
c=0;
for f in *pdf
do
## Link the PDF with a safe name
ln -s "$f" "$c".pdf
## Include the PDF in the tex file
printf '\includepdf[pages=-]{%s.pdf}\n' "$c" >> all.tex;
## Get the number of pages
pages=$(pdfinfo "$c".pdf | grep -oP '^Pages:\s*\K\d+')
## Add an empty page if they are odd
[[ $(expr "$pages" % 2) != 0 ]] &&
printf '%s\n' "\newpage\null" >> all.tex
((c++));
done
printf '\end{document}' >> all.tex;
pdflatex all.tex
Como este é o LaTeX, você pode fazer todo tipo de material extra. Por exemplo, você pode ter cada PDF em sua própria seção, com um índice clicável:
#!/bin/bash
cat<<EoF > all.tex
\documentclass{article}
\usepackage{pdfpages}
\usepackage[colorlinks=true,linkcolor=blue,linktoc=page]{hyperref}
\begin{document}
\tableofcontents
\newpage
EoF
## rename the PDFs to something safe
c=0;
for f in *pdf
do
## Link the PDF with a safe name
ln -s "$f" "$c".pdf
## Include the PDF in the tex file
cat<<EoF >> all.tex
\section{${f//.pdf}}
\includepdf[pages=-]{$c.pdf}
EoF
## Get the number of pages
pages=$(pdfinfo "$c".pdf | grep -oP '^Pages:\s*\K\d+')
## This time, because each PDF has its own section title
## we want to add a blank page to the even numbered ones
[[ $(expr "$pages" % 2) = 0 ]] &&
printf '%s\n' "\newpage\null\newpage" >> all.tex
((c++));
done
printf '\end{document}' >> all.tex;
## Need to run it twice to build the ToC
pdflatex all.tex; pdflatex all.tex;