2012-03-21 6 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 

을 그리고 나는이 메시지를 가지고 모든 사용자에게. 오류 메시지 : bash는 스크립트 내 와일드 카드에 문제가

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. 

있습니까?

+0

#!/bin/sh를 파일의 세 번째 줄에 넣으면 전혀 무의미합니다. shebang은 첫 번째 줄의 첫 번째 열에서 발생하는 경우에만 사용됩니다. (즉, '#!'은 파일의 처음 두 바이트 여야합니다.) –

+0

이 표시됩니다. 하지만 왜'$ bash foobar.sh' 일 때 스크립트가 작동합니까 ?? – alvas

+0

인터프리터를 지정하고 운영 체제에 인터프리터를 결정하도록 요청하지 않기 때문에. 게다가/bin/sh는 배열을 이해하지 못한다. 이것은 bash 특정 적이다. –

답변

2

와일드 카드가 내게 적합합니다. 오류 메시지는 대개 FILES/ 디렉토리 (또는 현재 디렉토리)에 1318-*.pdf 패턴과 일치하는 파일이없고 FILES/이 없기 때문에 cd이 실패했음을 의미하므로이 파일을 확인하려면 pwd을 추가 할 수 있습니다. 이 같은 명령을 참조하십시오

echo 1318-*.pdf 

패턴 1318-*.pdf은 파일 이름으로 대체됩니다 그것은으로 을 대체하는 어떤 파일 이름이있는 경우. 그렇지 않으면 그대로 유지되고있는 그대로 명령에 전달됩니다. (기본 동작입니다. nullglob 옵션을 설정하여 패턴을 제거하거나 failglob을 실행하면 명령을 실행하지 않아도되지만 그 중 어느 것도 유용하지는 않습니다.)

-f 옵션을 설정하여, 파일 이름 확장을 해제, 그래서 당신이 원하는 경우에 당신은

set +f 

그냥 파일 이름 확장이 켜져 있는지 확인하기 위해 추가 할 수 있습니다; 하지만 그게 문제인지 의심 스럽네.

+0

확인한 후에는 와일드 카드에 문제가 없습니다. 문제는 이러한 pdf 파일 중 일부에 있으며 단지'pdftk '가 불가능하다는 것입니다. 나는 그것들 중 몇 개를 수동으로 시도함으로써 그것을 시험했다. 감사!! – alvas