2014-10-07 2 views
1

bash에서 스크립트에 문제가 있습니다. My for 함수는 find 함수의 결과를 사용합니다.bash 스크립트에서 찾기 기능의 결과와 관련된 문제

짧은 이야기 : SSH에서 함수가 2 개의 결과를 반환하고 bash 스크립트에서 단일 결과를 반환합니다.

다음 코드를 모두 시도했습니다. 지정된 경로에서

for f in $(find $path -name *.properties) 
do 
echo $f 
done 

또는

list=$(find $path -name *.properties) 
for f in $list; 
do 
echo $f 
done 

는 파일이 내가 찾고 있어요 확장자를 가지고, 여러 폴더와 파일이 있습니다. SSH에서이 명령 중 하나를 실행하면 두 파일을 모두 찾을 수 있지만 bash 스크립트에서 명령을 실행하면 결과에 단일 파일이 포함됩니다.

for 함수는 잘 작동하지만 문제는 find 함수입니다. 내가 스크립트 bash에서 다음 코드를 실행하고 난 여전히 하나의 결과가 있습니다.

list=$(find $path -name *.properties) 
echo $list 

나는 SSH에서 다음 코드를 실행하고 나는이 개 파일을 발견

[[email protected] ~]# for f in $(find $path/temp/ -name *.properties); do echo $f 
> done 

이 사람이 나를 도울 수 있습니까?

감사합니다.

+2

시도를'금리 즉, ($ 경로 -name '* .properties''을 찾을 수) – isedev

+0

"$ path"너무 좋은 측정 값입니다. 또한 찾고있는 파일의 경로와'$ path'의 값을 보여줄 수 있습니까? –

+0

감사합니다. @isedev! 좋은 하루 되세요! – adimoise91

답변

1

을 인용 적절한 process substitution를 사용하여이 while 루프를 사용하고 -print0 옵션을 사용 BASH 더를 사용하는 경우 :

while IFS= read -rd '' f; do 
    echo "$f" 
done < <(find "$path" -name '*.properties' -print0) 
+1

아마도'read -rd '''와'find -print0'을 제안 할 것인가? –

+0

감사합니다. @EtanReisner, 그에 따라 편집했습니다. – anubhava

+1

@anubhava 대단히 감사합니다. 나는 이것을 시도 할 것이다. :) 좋은 하루 되세요! – adimoise91

0

나중에 bash 4를 사용하는 경우, 오히려 find에 바닐라 전화보다 globstar 연산자를 사용 단순히 파일 계층 구조를 통해 반복됩니다.

shopt -s globstar 
for f in "$path"/**/*.properties; do 
    echo "$f" 
done 

(몸이 정말 경우 단지 echo $f 다음 printf "%s\n" "$path"/**/*.properties 루프를 사용하는 대신 충분합니다.)

관련 문제