2009-08-09 8 views
5

Voglio salvare/scaricare pdf dal sito Web di X e combinare tutti quei pdf in uno, in modo che sia facile per me vederli tutti in una volta.combina più PDF in linux usando lo script?

Quello che ho fatto,

  1. ottenere file PDF dal sito web

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

  2. combinare file PDF in un unico

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

La mia domanda/problema è, ho pensato di automatizzare tutto questo in uno script, in modo che non devo farlo tutti i giorni. Qui i nuovi pdf vengono aggiunti ogni giorno in X.

Quindi, come posso fare il punto 2 sopra, senza dare la lista completa di tutti i pdf, ho provato a fare file*.pdf in step2; ma ha combinato tutti i pdf in ordine casuale.

problema successivo è, il numero totale di file * .pdf, non è lo stesso di tutti i giorni, a volte 5 file PDF a volte 10 ... ma cosa bella è che è chiamato in ordine file1.pdf file2.pdf ...

Quindi, ho bisogno di aiuto per completare sopra il punto 2, in modo che tutti i pdf siano combinati in ordine e non devo dare il nome di ciascun pdf esplicitamente

Grazie.

UPDATE: Questo risolto il problema

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

ho fatto ls -rt come file1.pdf è stato scaricato prima, e poi file2.pdf e così via ... solo facendo ls -t messo file20. pdf in start e file1.pdf in ultimo ...

risposta

3

Ho anche usato pdftk in passato con buoni risultati.

Per elencare i file in ordine numerico, è possibile istruire sorta di ignorare il primo $ n - 1 caratteri del nome del file in questo modo:

ls | sort -n -k 1.$n 

Quindi, se si ha il file * .pdf:

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

Ho usato pdftk prima per concatenazioni come pdftk sembra essere prontamente disponibile per Debian/Ubuntu.

+0

Desidero combinare i file PDF per ordine; usando * .pdf lo combina in ordine casuale ... voglio combinare in questo ordine file1.pdf ... file9.pdf file10.pdf file11.pdf e così via ... –

1

Si potrebbe fare qualcosa di simile:

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

$GSCOMMAND $FILES 

Questo sta assumendo i file sono denominati "file.pdf". Vedi anche il post di alberge.

Farà cose strane ai file con spazi nel loro nome, quindi sarà necessario aggiungere l'escaping se è necessario essere in grado di gestire i nomi con spazi.

sono davvero curioso quello che gli altri si presenti con, come questo mi sembra un bel soluzione rapida e sporca, ma sta migliorando grazie alle risposte di altre persone :)

EDIT

Utilizzato il comando di ordinamento numerico per FILE come suggerito da alberge.

Problemi correlati