2013-05-20 146 views
1

我有幾千個PDF需要根據文件名進行合併。Bash腳本pdftk合併PDF

命名,如:

Lastname, Firstname_12345.pdf 

而是覆蓋或追加,我們的軟件附加一個數字/日期爲PDF格式,如果有更多的頁面,如:

Lastname, Firstname_12345_201305160953344627.pdf 

對於所有的那些別沒有第二(或第三)pdf腳本不需要觸摸。但是,對於所有具有倍數的人來說,他們需要合併成一個新文件*_merged.pdf?並刪除原件。

我給了這個我最大的努力,這是我迄今爲止。

#! /bin/bash 

# list all pdfs to show shortest name first 
LIST=$(ls -r *.pdf) 
for x in "$LIST" 

# Remove .pdf extension. merge pdfs. delete originals. 
do 
    y=${x%%.*} 
    pdftk "$y"*.pdf cat output "$y"_merged.pdf 
    find "$y"*.pdf -type f ! -iname "*_merged.pdf" -delete 
done 

該腳本在一定程度上起作用。它會合並和刪除原件,但它沒有任何內容可以跳過那些不需要附加任何東西的東西,當我在一個文件夾中運行它時,它會在一個文件後停止。任何人都可以將我指向正確的方向嗎?

+0

您能否提供一個樣品名稱列表? – beruic

回答

0

由於您的文件名包含空格,因此for循環將無法正常工作。

一旦你有一個文件名列表,測試匹配y*.pdf匹配的文件的數量,以確定是否需要合併PDF文件。

#!/bin/bash 

    LIST=(*) 

    # Remove .pdf extension. merge pdfs. delete originals. 
    for x in "${LIST[@]}" ; do 
     y=${x%%.pdf} 
     if [ $(ls "$y"*.pdf 2>/dev/null | wc -l) -gt 1 ]; then 
      pdftk "$y"*.pdf cat output "$y"_merged.pdf 
      find "$y"*.pdf -type f ! -iname "*_merged.pdf" -delete 
     fi 
    done 
+0

完美地工作。非常感謝! – edwlarkey