2012-03-21 16 views
1

私は一意の番号で始まる一連のpdfファイルを持っています。各数字はユーザーを表します。そして今、私は各ユーザーのすべてのpdfファイルを "AllInOne"ファイルに連結しようとしています。しかし、私がbashスクリプトを実行しようとすると、pdftkコマンドでワイルドカードが認識されません。bashスクリプトの反復でワイルドカードエラー - シェル

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スクリプト実行しようとした:

すべてのユーザは、次のような名前が付けられたPDFファイルのセットを持っています

# 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

ファイルの3行目に#!/ bin/shを置くのは全く無意味です。シバンは、最初の行の最初の列にある場合にのみ使用されます。 (つまり、 '#!'はファイルの最初の2バイトでなければなりません)。 –

+0

が記載されています。しかし、私が '$ bash foobar.sh'を実行しても、スクリプトはなぜ動作するのですか? – alvas

+0

あなたはインタープリタを指定しており、OSにインタプリタを決定するように依頼していないためです。/bin/shは配列を理解できませんが、それはbash固有です。 –

答えて

2

あなたのワイルドカードは私の目に見えます。あなたのエラーメッセージは、FILES/ディレクトリ(または現在のディレクトリ)にパターン1318-*.pdfと一致するファイルがなく、FILES/が存在しないためにcdが失敗したことを意味するだけです。これを確認するにはpwdを追加してください)。あなたは、このようなコマンドでは、以下を参照してください。

echo 1318-*.pdf 

それはとを交換するためには任意のファイル名がある場合、パターン1318-*.pdfはファイル名のみに置き換えられます。それ以外の場合はそのまま残され、そのままコマンドに渡されます。 (これはデフォルトの動作です。nullglobオプションを設定してパターンを削除するか、またはコマンドを実行しても失敗するようにfailglobを設定できます)。

これは可能です-fオプションを設定することで、ファイル名の拡張をオフにし、そうしたい場合は、単にファイル名の拡張がオンになっていることを確認する

set +f 

を追加することができます。しかし、私はそれが問題だとは思わない。

+0

チェックした後、私のワイルドカードに問題はありません。問題は、これらのpdfファイルの中には、単に 'pdftk'ができないことにあります。私は手動でそれらのいくつかをしようとすることによってそれをテストしました。ありがとう!! – alvas