объединить несколько PDF-файлов в Linux с помощью скрипта? - PullRequest
5 голосов
/ 09 августа 2009

Я хочу сохранить / загрузить PDF-файлы с веб-сайта X, а затем объединить все эти PDF-файлы в один, чтобы мне было легко увидеть их все сразу.

Что я сделал,

  1. получить PDF с сайта

    wget -r -l1 -A.pdf --no-parent http://linktoX

  2. объединить PDF в один

    gs -dNOPAUSE -sDEVICE = pdfwrite -sOUTPUTFILE = Combined_ date +%F .pdf -dBATCH file1.pdf file2.pdf file3.pdf

Мой вопрос / проблема в том, что я думал об автоматизации всего этого в одном сценарии, чтобы мне не приходилось делать это каждый день. Здесь новые файлы PDF добавляются ежедневно в X.

Итак, как я могу сделать шаг 2 выше, не давая полный список всех PDF-файлов, я попытался сделать file*.pdf в шаге 2; но он объединил все PDF-файлы в случайном порядке.

Следующая проблема в том, что общее количество файлов * .pdf не одинаково каждый день, иногда 5 pdf, иногда 10 ... но приятно то, что он назван в порядке file1.pdf file2.pdf ...

Итак, мне нужна некоторая помощь для выполнения шага 2, описанного выше, чтобы все pdf-файлы были объединены по порядку, и мне не нужно было явно указывать имя каждого pdf-файла

Спасибо.

UPDATE: Это решило проблему

pdftk `ls -rt kanti*.pdf` cat output Kanti.pdf

Я сделал ls -rt, так как сначала был загружен файл file1.pdf, а затем file2.pdf и т. Д., Просто выполняя команду ls -t, вставив файл file.pdf в начало, и файл file1.pdf в последний ...

Ответы [ 3 ]

3 голосов
/ 10 августа 2009

Я также использовал pdftk в прошлом с хорошими результатами.

Для вывода списка файлов в числовом порядке вы можете указать сортировке игнорировать первые $ n - 1 символов имени файла, выполнив следующее:

ls | sort -n -k 1.$n

Так что, если у вас есть файл * .pdf:

$ ls | sort -n -k 1.5
file1.pdf
file2.pdf
file3.pdf
file4.pdf
file10.pdf
file11.pdf
file20.pdf
file21.pdf
2 голосов
/ 09 августа 2009

Я использовал pdftk ранее для таких конкатенаций, поскольку pdftk легко доступен для Debian / Ubuntu.

1 голос
/ 10 августа 2009

Вы можете сделать что-то вроде:

GSCOMMAND="gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=Combined_date +%F.pdf -dBATCH"
FILES=`ls file*.pdf | sort -n -k 1.5`

$GSCOMMAND $FILES

Предполагается, что файлы называются «file.pdf». Смотрите также сообщение от alberge.

Это будет делать странные вещи с файлами с пробелами в их именах, поэтому вам нужно добавить экранирование, если вам нужно иметь возможность обрабатывать имена с пробелами.

Мне действительно любопытно, что придут другие люди, поскольку это кажется мне довольно быстрым и грязным решением, но поправляется благодаря ответам других людей :)

EDIT

Использовал числовую команду сортировки для файлов, как это было предложено alberge.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...