find 명령의 루프에 대한 bash의 참조 항목

find 명령의 루프에 대한 bash의 참조 항목

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

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귀하가 달성해야 하는 작업을 수행할 수 있는지 확인하는 것이 좋습니다 .

관련 정보