2012-10-21 3 views
0

find 명령의 결과를 배열에 저장하려고합니다.Bash Scripting : 인용 된 변수가있는 find 명령을 배열에 출력합니다.

나는 여러 가지를 시도했지만 아무 것도 작동하지 않는 것처럼 보였습니다. 문제가 "$ {findNameCmdSubDir [@]}" 토큰 화되고 검색에서 제외 할 디렉터리가 무시되고 모든 디렉터리가 나열되는 것 같습니다.

배열에 전달하지 않고 find 명령을 주면, 즉, plain find 명령을 사용하면 제외되지 않은 다른 모든 디렉토리를 나열하는 예상 출력을 볼 수 있습니다.

#! /bin/bash 
android_path=$1 
excludeDirFromSearch=(doc build test unit-test script hardware prebuilt device .) 
let "dirCount = 0" 

findNameCmdSubDir=() 
for dir in "${excludeDirFromSearch[@]}"; do 
    if [ $((dirCount++)) -eq ${#excludeDirFromSearch[@]} ]; then 
      findNameCmdSubDir+=(-name "${dir}*") 
    else 
      findNameCmdSubDir+=(-name "${dir}*" -prune -o) 
    fi 
done 

searchSubDirectories=() 
searchSubDirectories=($(find "${android_path}" -mindepth 1 -maxdepth 1 \ 
"${findNameCmdSubDir[@]}" -type d)) <<-- Not Working! 
#find "${android_path}" -mindepth 1 -maxdepth 1 "${findNameCmdSubDir[@]}" \ 
# -type d | while read line; do 
#  echo "$line" 
#done <-- Not working 
find "${android_path}" -mindepth 1 -maxdepth 1 "${findNameCmdSubDir[@]}" \ 
    -type d -print <-- works as expected ! 

echo "${searchSubDirectories[@]}" 

업데이트

나는 따옴표 여전히 행운을 탈출 시도는

searchSubDirectories=($(find "${android_path}" -mindepth 1 -maxdepth 1 \"${findNameCmdSubDir[@]}\" -type d)) <<-- Not Working! 

답변

0

이 문제는 당신은 끝에 -print 누락

searchSubDirectories=($(find "${android_path}" -mindepth 1 -maxdepth 1 \ 
"${findNameCmdSubDir[@]}" -type d)) 

여기에있다. 이 블록

for dir in "${excludeDirFromSearch[@]}"; do 
    if [ $((dirCount++)) -eq ${#excludeDirFromSearch[@]} ]; then 
      findNameCmdSubDir+=(-name "${dir}*") 
    else 
      findNameCmdSubDir+=(-name "${dir}*" -prune -o) 
    fi 
done 

에 관한 또한


는, 당신은 그것을 필요하지 않습니다이

if [ $((dirCount++)) -eq ${#excludeDirFromSearch[@]} ]; then 
      findNameCmdSubDir+=(-name "${dir}*") 

제거. 당신은

find -name EXCLUDE1 -prune -o -name EXCLUDE2 -prune -type d 
+0

을 (당신이 의도 한대로 작동하지 않을 것이다) 당신이 생각하고있는 것과 비교해이 양식을

find -name EXCLUDE1 -prune -o -name EXCLUDE2 -prune -o -type d -print 

가 있어야 완성 된 명령 문자열 즉, 모든 제외 된 디렉토리에 대한 -prune -o 필요 누락 된'-print'는이 문제와 관련이 없습니다. 'find (1)'를 참조하십시오 : * 표현식이 주어지지 않으면, 표현식 -print가 사용됩니다 *. –

0

"작동하지 않는"정의합니다. 기대하는/달성하고자하는 결과는 무엇입니까? 실제 결과는 무엇입니까? 새 배열에 사람들을 데려 가고 싶다는

공백 인쇄 경로 find 경우와, command substitution 대신 process substitution 시도 :

findopts="-mindepth 1 -maxdepth 1 -type d" 
... 
searchSubDirectories=() 
while read dir; do 
    searchSubDirectories+=("$dir") 
done < <(find "${android_path}" $findopts "${findNameCmdSubDir[@]}") 

주 두 < 문자 사이의 공간을!

관련 문제