현재 디렉터리의 모든 파일을 구문 분석하려고 합니다. 찾기 기능이 있지만 공백이 있는 파일 디렉터리를 루프로 구문 분석할 수 없는 것 같습니다. "$DIR"
제가 검색하고 싶은 디렉토리는 다음과 같습니다. 누구든지 이것이 작동하도록 수정하는 방법을 알고 있습니까? 감사해요.
for file in $(find "$DIR" -type f)
do
echo "$file"
done
답변1
find ... | xargs ...
둘 find ... -exec ...
다 이보다 더 나은 옵션입니다. 쉘 루프를 사용하여 찾기 결과를 올바르게 반복하려면 루프를 사용해야 합니다 while read
.
while IFS= read -d '' -r filename; do
echo "$filename"
done < <(find "$dir" -type f -print0)
거기에는 풀어야 할 내용이 많이 있습니다.
- 우리는프로세스 교체find 명령을 실행하면 결과를 파일처럼 읽을 수 있습니다.
- 입력 줄을 그대로 읽으려면 bash 관용구는 입니다
IFS= read -r line
. 이를 통해 임의의 공백과 백슬래시를 변수로 읽을 수 있습니다. read -d ''
-print0
줄 바꿈 문자 대신 줄 끝 문자로 널 바이트( 에 의해 생성됨)를 사용하십시오 .
답변2
for
이것을 반복할 필요는 없습니다 .
find "$dir" -type f
기본적으로 발견된 모든 객체가 출력됩니다.
다음을 통해 이를 명확하게 할 수 있습니다.
find "$dir" -type f -print
만약 너라면진짜이를 반복하려면 빈 구분 기호를 사용하고 다음을 사용하세요 xargs
.
find "$dir" -type f -print0 | xargs -0 -n1 echo
아니면 find
당신 자신의 -exec
:
find "$dir" -type f -exec echo "{}" \;
답변3
당신은해야출력을 구문 분석하지 않습니다.find
너도 같은 이유로파싱하면 안 된다ls
다음 대신 find
/를 사용해 보세요 .exec
find "$DIR" -type f -exec echo {} \;