Удивительно, я видел много справочных страниц о том, как это сделать, из того же каталога. Те, которые рекурсивно используются, похоже, не работают для меня (попытки ниже) или требуют сложностей, которые я не хочу использовать, поскольку я их не понимаю (даже хуже, чем эти).
В общем , У меня есть PDF-файлы, разбросанные по многим поддиректориям, и я хочу go через каждый из них и объединить PDF-файлы в один большой PDF-файл.
В основном они пришли из:
https://unix.stackexchange.com/questions/298031/compress-all-pdf-files-recursively
Объединить / преобразовать несколько файлов PDF в один PDF
Первая попытка: (Это отлично работает, но только из каталога):
qpdf --empty --pages *.pdf -- out.pdf
at top level directory, this didn't work:
find . -type f -name "*.pdf" -exec bash -c 'qpdf --empty --pages "{}" -- merged.pdf;' {} \;
Вторая попытка:
find . -type f -name "*.pdf" | while read -r file; do pdfjam "$file" -o output.pdf; done
or
touch output.pdf
find . -type f -name "*.pdf" | while read -r file; do pdfjam "$file" output.pdf -o output.pdf; done
Третья попытка:
find . -type f -name "*.pdf" -exec bash -c 'pdftk "{}" cat output "new.pdf";' {} \;
or
touch new.pdf
find . -type f -name "*.pdf" -exec bash -c 'pdftk "{}" new.pdf cat output "new.pdf";' {} \;
Четвертая попытка:
python3 -m pip install --user pdftools
pdftools merge --input-dir ./top_directory --output out.pdf
usage: pdftools [-h] [-V] <command> ...
pdftools: error: unrecognized arguments: --input-dir
Пятая попытка (кажется наиболее успешной, хотя выходной файл есть только страницы первого файла):
find . -type f -name "*.pdf" -exec bash -c 'gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=out.pdf "{}";' {} \;
Я думал о различиях с find .... {} \;
или find .... {} +
, поэтому я тоже попробовал
Шестой атрибут:
find . -type f -name "*.pdf" -exec bash -c 'gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=out.pdf ;' {} +
, в результате чего получилась пустая страница.
Мне ясно, что у меня проблемы с объединением файлов - вероятно y с помощью команды find -exec
, и с различными инструментами проблем нет ....
EDIT
Думаю, я мог бы выполнить двухэтапную процедуру ,
find . -name "*pdf" -exec mv {} pdfs \;
qpdf --empty --pages *.pdf -- out.pdf
, но я хотел однострочник, но, что более важно, знаю, почему я использую find
неправильно ...
EDIT 2
Мне действительно нужна только первая страница каждого файла, но это не имеет большого значения.