find exec를 사용하여 배열에 푸시

find exec를 사용하여 배열에 푸시

find발견된 모든 파일을 반복 하고 각 파일을 배열에 추가하고 싶습니다 . 이것이 내가 지금까지 가지고 있는 것입니다:

myarray=()
find . -name '*.php' -exec myarray\+=\({}\) \;
echo "${myarray[@]}"

대신 다음과 같은 것을 많이 생성합니다.

find: myarray+=(./somedir/somefile.php): No such file or directory

적절한 이스케이프를 사용하여 이 작업을 수행할 수 있는 방법이 있습니까?

답변1

접근 방식은 다음과 같아야 합니다. 사고방식을 균형 있게 유지하려면 다음과 같이 하십시오.

myarray=()

while IFS= read -rd '' files; do myarray+=("$files")
 done < <(find . -type f -name '*.php' -print0)

printf '%s\n' "${myarray[@]}"

참고로. myarray=()배열 변수를 전혀 정의할 필요가 없습니다 . 무시해도 됩니다.

관련 정보