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!
을 (당신이 의도 한대로 작동하지 않을 것이다) 당신이 생각하고있는 것과 비교해이 양식을
가 있어야 완성 된 명령 문자열 즉, 모든 제외 된 디렉토리에 대한
-prune -o
필요 누락 된'-print'는이 문제와 관련이 없습니다. 'find (1)'를 참조하십시오 : * 표현식이 주어지지 않으면, 표현식 -print가 사용됩니다 *. –