2017-04-03 5 views
1

특정 루트 디렉토리의 특정 하위 문자열과 일치하는 파일 경로를 찾고 싶습니다.경로를 찾는 방법은 루트 디렉토리의 하위 문자열과 재귀 적으로 일치합니까?

다음은 내 셸 스크립트입니다. 하나씩 테스트 할 때 결과가 좋습니다. 하지만 루프 할 때 결과는 비어 있습니다. 그 원인에 대해 누가 조언 할 수 있습니까?

나는 지금

path=$(echo $LINE |cut -d'(' -f2|cut -d')' -f1) 

에 의해 파일()의 내용을 추출

file('.*/cm-audio/src/main/*') 
file('.*/cm-common/include/cm_common/utils/*') 

filename=include_pattern 
cat $filename | while read LINE 
do 
    echo $LINE 
    path=$(echo $LINE |cut -d'(' -f2|cut -d')' -f1) 
    echo $path 
    result=$(find . -path $path) 
    echo $result 
done 

include_pattern 내 스크립트, I는 다음과 같은 경로를 찾아보십시오 하위 문자열 $ 경로

find . -path $path 

결과가 비어 있습니다.

그러나 명령 줄에서 독립 실행 형으로 시도하면 경로 목록이 반환됩니다. 예 :

find . -path '.*/cm-audio/src/main*' 

이 전체 스크립트가 작동하지 않는 이유는 아닙니다. 이것에 대해 조언 해 주시겠습니까? 같은 라인 포함 된 TEXTFILE에서 읽기 어디 당신을 생각 ...

filename='text_file_containing_include_pattern_on_each_line.txt' 
while IFS='' read -r line || [[ -n "$line" ]]; do 
    path=$(echo "$line" |cut -d'(' -f2|cut -d')' -f1) 
    find \. -path "${path//\'}" 
done < $filename 

아 기다릴 :

+0

패턴 파일에서'''을 제거하십시오. file (. */cm-audio/src/main/* ')'make'파일 (. */cm-audio/src/main/*)'- 또는 -'find. -path "$ {path // '}"' – jm666

+0

내 대답의 편집 부분을 참조하십시오. – Montmons

답변

0

이 시도

file('.*/cm-audio/src/main/*') 
file('.*/cm-common/include/cm_common/utils/*') 

을하지만 내가 적응할 수 있도록 .. 지금은 틀렸다 참조 잠깐의 내 대답은 ..

편집

변수에 include_pattern을 저장 한 경우 :

include_pattern="file('.*/cm-audio/src/main/*') 
file('.*/cm-common/include/cm_common/utils/*')" 
for file in $include_pattern; do 
    path=$(echo "$file" |cut -d'(' -f2|cut -d')' -f1) 
    find \. -path "${path//\'}" 
done 
+0

질문이 하나 더 있습니다. 경로 중 일부가 /.* 'not/*'로 끝나면 어떻게이 예외 상황을 처리 할 수 ​​있습니까? 예 : '. */power-manager/PowerManager /.*' –

+0

두 경로 모두 'include_pattern'에 입력하면 올바르게 처리되어야합니다. 또한,'/.* '로 끝나는 모든 경로는 애 스터 릭스가 사용 가능한 모든 문자를 반복 할 것이므로'/ *'를 통해 찾아야합니다. 그래서'.'를 반복합니다. 경로를'/.* '로 제한하면 숨겨진 파일이나 폴더는'.'로 시작하는 유일한 파일이기 때문에 발견 할 수 있습니다. – Montmons