공백이 포함된 파일 이름 목록을 찾기에서 추출합니다.

공백이 포함된 파일 이름 목록을 찾기에서 추출합니다.

특정 디렉토리에 있는 특정 유형의 모든 파일에 대해 일부 작업을 수행하고 싶습니다. 나는 bash 스크립트에 다음과 같이 썼다.

HANDIN_FILES=`find . -type f -printf "%f\n" | head -20 `
for i in $HANDIN_FILES
do
  echo $i
done

첫 번째 버전으로. 파일 이름에 공백이 없으면 완벽하게 작동합니다. 파일이 있으면 silly name.txt파일이 먼저 나오고 그 다음이 i됩니다 . 이는 제가 원하는 것이 전혀 아닙니다.sillyname.txt

do ... done명령 -exec의 옵션 에 모든 것을 넣을 수 있다는 것을 알고 있지만 find나중에 사용할 수 있도록 파일 목록을 쉘 변수에 보관하고 싶습니다. 누군가 i루프를 한 번 반복하여 값을 얻기 위한 빠른 수정을 제안할 수 있습니까 ?silly name.txt

답변1

4.4+ 버전 bash:

readarray -td '' files < <(find . -type f -print0 | head -zn 20)
for i in "${files[@]}"; do
  something with "$i"
done

이전 버전의 bash의 경우:

files=()
while IFS= read -rd '' file; do
  files+=("$file")
done < <(find . -print0 | head -zn 20)

for i...

여기서는 사용이 더욱 간단합니다 zsh.

files=(**/*(D.[1,20]))
for i ($files) something with $i

(적어도 파일 목록은 다음과 같이 정렬됩니다.상위 20위더 의미있음)

바라보다찾기 결과를 반복하는 것이 왜 나쁜 습관입니까?출력을 처리(또는 처리하지 않음)하기 위한 find추가 방법 입니다.

관련 정보