2009-08-09 3 views
5

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

То, что я сделал,

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

    Wget -r -l1 -A.pdf --no-родитель http://linktoX

  2. сочетающие PDFs в один

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

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

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

Следующая проблема, общее количество файлов * .pdf не совпадает каждый день, иногда 5 PDFs иногда 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 положить file20. pdf в начале и файле1.pdf в последнем ...

ответ

3

Я также использовал 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

Раньше я использовал pdftk для таких конкатенаций, что pdftk может быть легко доступен для Debian/Ubuntu.

+0

Я хочу комбинировать pdf-файлы по заказу; используя * .pdf, объединяет его в случайном порядке ... Я хочу объединить в этом порядке файл1.pdf ... file9.pdf file10.pdf file11.pdf и так далее ... –

1

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

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.

Смежные вопросы