백슬래시와 공백을 처리하도록 찾기 함수 루프를 어떻게 수정합니까? [복사]

백슬래시와 공백을 처리하도록 찾기 함수 루프를 어떻게 수정합니까? [복사]

현재 디렉터리의 모든 파일을 구문 분석하려고 합니다. 찾기 기능이 있지만 공백이 있는 파일 디렉터리를 루프로 구문 분석할 수 없는 것 같습니다. "$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 {} \;

관련 정보