특정 디렉토리에 있는 특정 유형의 모든 파일에 대해 일부 작업을 수행하고 싶습니다. 나는 bash 스크립트에 다음과 같이 썼다.
HANDIN_FILES=`find . -type f -printf "%f\n" | head -20 `
for i in $HANDIN_FILES
do
echo $i
done
첫 번째 버전으로. 파일 이름에 공백이 없으면 완벽하게 작동합니다. 파일이 있으면 silly name.txt
파일이 먼저 나오고 그 다음이 i
됩니다 . 이는 제가 원하는 것이 전혀 아닙니다.silly
name.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
추가 방법 입니다.