find 명령을 통해 bash for 루프의 참조 항목

find 명령을 통해 bash for 루프의 참조 항목

다음과 같은 코드가 있다고 가정해 보겠습니다.

for i in $(find * -type f -name "*.txt"); do 
  # echo [element by it's index]
done

가능하다면 인덱스로 요소에 어떻게 액세스할 수 있나요?

답변1

주문

$(find * -type f -name "*.txt")

배열이 아닌 (공백으로 구분된) bash 목록을 반환하므로 실제로 "대상" 방식으로 개별 요소에 액세스할 수 없습니다.

bash 배열로 변환하려면 다음을 사용하십시오.

filearray=( $(find * -type f -name "*.txt") )

(공백에 주의하세요!)

그런 다음 다음과 같이 개별 항목에 액세스할 수 있습니다.

for ((i=0; i<n; i++))
do
   file="${filarray[$i]}"
   <whatever operation on the file>
done

항목 수는 다음을 통해 검색할 수 있습니다.

n="${#filearray[@]}"

하지만 참고하세요이것이오직파일 이름에 특수 문자(특히 공백)가 포함되어 있지 않은 경우에 작동합니다.ls또는 의 출력을 구문 분석하는 것은 권장되지 않습니다 .find. 귀하의 경우에는 -exec이 옵션이 find귀하가 달성해야 하는 작업을 수행할 수 있는지 확인하는 것이 좋습니다 .

관련 정보