2012-03-21 42 views
1

我有一堆以唯一編號開頭的pdf文件。每個數字代表一個用戶。現在我試圖將每個用戶的所有PDF文件連接成一個「AllInOne」文件。但是當我嘗試運行我的bash腳本時,它不能識別pdftk命令中的通配符。bash腳本迭代中的通配符錯誤 - Shell

每個用戶都會有一組被命名爲這樣的PDF文件:

1019-APP-CV-01.pdf 
1019-APP-SOI-01.pdf 
1019-APP-EC-01.pdf 
1019-APP-TOR-01.pdf  
1019-APP-TOR-02.pdf  
1019-ADM-LOR1-01.pdf 
1019-ADM-LOR2-01.pdf 

我試圖運行這個bash腳本

# Script for concat all pdf files of an array of applicants to one file. 

#!/bin/sh 
cd FILES 
array=(1019 1041 1042 1043 1044 1049 1063 1070 1073 1074 1075 1077 1078 1079 1094 1105 1111 1115 1120 1122 1124 1137 1138 1141 1143 $ 

for i in "${array[@]}" 
do 
     pdftk $i-*.pdf cat output $i-AllInOne.pdf; 
done 

而且我已經得到了這些消息爲所有用戶。 錯誤消息:

Errors encountered. No output created. 
Done. Input errors, so no output created. 
Error: Failed to open PDF file: 
    1318-*.pdf 
Errors encountered. No output created. 
Done. Input errors, so no output created. 
Error: Failed to open PDF file: 
    1319-*.pdf 
Errors encountered. No output created. 
Done. Input errors, so no output created. 

是不是有什麼毛病我通配符在bash腳本?

+0

將#!/ bin/sh放在文件的第三行是毫無意義的。只有當它出現在第一行的第一列時才使用shebang。 (即'#!'必須是文件的前兩個字節。) – 2012-03-21 20:20:55

+0

注意。但爲什麼腳本仍然工作,當我'$ bash foobar.sh' ?? – alvas 2012-03-21 20:32:03

+0

因爲您正在指定解釋器而不是要求操作系統確定解釋器。另外/ bin/sh不理解數組,這是bash特有的。 – 2012-03-21 21:44:38

回答

2

您的通配符對我來說很合適;您的錯誤消息很可能只是表示沒有與FILES/目錄中的1318-*.pdf模式匹配的文件(或者在當前目錄中,並且cd因爲FILES/不存在而失敗;您可以添加pwd來檢查此問題)。你看,在這樣的命令:

echo 1318-*.pdf 

格局1318-*.pdf將只與文件名來代替,如果有任何文件名它與更換。否則,它保持不變,並按原樣傳遞給命令。 (這是默認行爲,你可以設置nullglob選項讓它只是刪除模式,或failglob使它失敗並且不執行命令;但這兩者在這裏都沒有幫助。)

這是可能的關閉文件名擴展,通過設置-f選項,所以,如果你願意,你可以添加

set +f 

只是爲了確保文件名擴展已開啓;但我懷疑這是問題所在。

+0

通過檢查後,我的通配符沒有任何問題。問題在於這些pdf文件中的某些文件不能「pdftk」。我已經通過嘗試手動完成其中的一些測試。謝謝!! – alvas 2012-03-21 19:54:08