2009-08-09 12 views
5

Chcę zapisać/pobrać pliki pdf z witryny X, a następnie połączyć wszystkie te pliki PDF w jeden, dzięki czemu łatwo będzie mi je zobaczyć na raz.połączyć wiele plików pdf w Linuksie za pomocą skryptu?

Co zrobiłem,

  1. dostać PDF ze strony internetowej

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

  2. łączą pdfs w jednym

    gs -dNOPAUSE -sEWVICE = pdfwrite -sOUTPUTFILE = Combined_ date +%F .pdf -dBATCH plik1.pdf plik2.pdf plik3.pdf

Moje pytanie/problem polega na tym, że pomyślałem o zautomatyzowaniu całości w jednym skrypcie, więc nie muszę tego robić codziennie. Tutaj nowe pliki PDF są dodawane codziennie w X.

Tak, jak mogę zrobić krok 2 powyżej, bez podawania pełnej listy wszystkich plików pdf, próbowałem robić file*.pdf w kroku 2; ale połączyło wszystkie pliki PDF w losowej kolejności.

Następny problem, łączna liczba plików * .pdf nie jest to samo codziennie, czasami 5 pdfs czasami 10 ... ale miłe jest to, że jest nazwany w celu file1.pdf file2.pdf ...

Potrzebuję więc pomocy, aby wykonać powyższy krok 2, tak, że wszystkie pliki PDF są połączone w kolejności i nie muszę podawać nazwy każdego pliku PDF jawnie

Dzięki.

UPDATE: To rozwiązało problem

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

zrobiłem ls -rt jak file1.pdf zostało pobrane, a potem file2.pdf i tak dalej ... po prostu robi ls -t zadane file20. pdf na początku i na file1.pdf w ostatnim ...

Odpowiedz

3

Używam również pdftk w przeszłości z dobrymi wynikami.

Dla wymieniające pliki w kolejności numerycznej, można polecić do sortowania zignorować pierwsze $ n - 1 znaków nazwy pliku w ten sposób:

ls | sort -n -k 1.$n 

Więc jeśli miał plik * .pdf:

$ ls | sort -n -k 1.5 
file1.pdf 
file2.pdf 
file3.pdf 
file4.pdf 
file10.pdf 
file11.pdf 
file20.pdf 
file21.pdf 
2

Użyłem wcześniej pdftk do takich połączeń, ponieważ pdftk jest łatwo dostępny dla Debiana/Ubuntu.

+0

Chcę połączyć pliki PDF według zamówień; użycie * .pdf łączy je w losowej kolejności ... chcę połączyć w tej kolejności plik1.pdf ... plik9.pdf plik10.pdf plik11.pdf i tak dalej ... –

1

Można zrobić coś takiego:

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

$GSCOMMAND $FILES 

to zakładając, że pliki są nazywane "file.pdf". Zobacz także post autorstwa alberge.

Będzie robić dziwne rzeczy w plikach ze spacjami w nazwie, więc musisz dodać polecenie escaping, jeśli chcesz obsługiwać nazwy ze spacjami.

Jestem bardzo ciekaw, co inni ludzie wymyślić, jak to wydaje mi się dość szybkie i zabrudzony rozwiązanie, ale coraz lepsze dzięki odpowiedzi innych ludzi :)

EDIT

Zastosowano polecenie sortowania numerycznego dla PLIKÓW zgodnie z sugestią alberge.

Powiązane problemy