2014-01-23 1 views
4

두 기계에서 CentOS 6.4 최종본을 사용하고 있습니다. 나는 스크립트를 실행하고있다. 스크립트는 find 명령find : 경로 앞에 표현식을 사용해야합니다.

path=$1 
searchstring=$2 
echo `find $path -name $searchString` 
for filename in `find $path -name $searchString` 
do 
echo "$filename" 
echo 
done 

./findfiles.sh /var/log/ *.txt 

위의 스크립트는 잘 실행하고 파일을 인쇄하고이 포함되어 있습니다. 그러나 두 번째 컴퓨터에서 나는 usage error: find: paths must precede expression

이유는 무엇입니까 것은 뒤에 그것을 잘 실행 find $path -name "$searchString" 에 파일 이름을 을 변경 찾기 command.After 확대되었다 .txt를 *입니다.

첫 번째 CentOS 컴퓨터에서 구문 오류가 발생하지 않는 이유는 무엇입니까?

+0

유사 : http://stackoverflow.com/questions/6495501/find-paths-must-precede-expression-how-do-i-specify-a- recursive-search-that – trante

답변

7

견적 쉘 인수 :

$ ./findfiles.sh /var/log/ '*.txt' 
+1

감사합니다. Lutz! 나는 똑같이 잘 작동합니다. 아직도 나는 기계의 작동에 대해 혼란 스럽다. 왜 내가 그것을 게시했는지. – Shriram

6

당신은 인용 적절한 사용이 필요하거나 쉘은 find이 그것을보고 *.txt 전에 확장하려고합니다. 현재 폴더가 a.txtb.txt이 포함 된 경우

은 그래서, 다음 find /var/log -name a.txt b.txt이 실행됩니다 -> find은 당신이 인용 적절한 사용하는 것이 중요 이유입니다 b.txt

수행 할 작업을 혼동됩니다. 스크립트가 있어야한다 :..! 당신이 searchstring를 정의 할 때 나는 따옴표를했습니다

path="$1" 
searchstring="$2" 
echo $(find "$path" -name "$searchString") 
for filename in $(find "$path" -name "$searchString") 
do 
    echo "$filename" 
    echo 
done 

참고 변수 할당이 (그렇지 않으면 글로브 확장이 일어날 것 같은 당신이 변수를 사용할 때 주위

따옴표 $()하는 경우 거기에 따옴표를 추가하면 결과적으로 하나의 "단어"를 반환합니다.

이전의 인라인 평가에서 백틱스를 사용하는 것이 항상 바람직합니다. 훨씬 더 안정적이며 오류가 적고 읽기 쉽습니다. .