이름에 공백이 있는 "find" 디렉토리를 어떻게 처리합니까? [복사]

이름에 공백이 있는 "find" 디렉토리를 어떻게 처리합니까? [복사]

나는 이것을 가지고있다:

#!/bin/bash

for file in `find . -type d`
do
  echo $file
done

라는 디렉토리만 있는 경우 My Directory출력은 다음과 같습니다.

My
Directory

어떻게 해결할 수 있나요?

이는 echo $file일시적일 뿐입니다. 또한 디렉터리에서 작동하는 다른 코드도 있습니다.

답변1

아래와 같은 조각들...

find . -type d | while read dir; do echo $dir; done
.
./my dir

수행 중인 작업에 따라 의 옵션과 find을 사용하는 것이 더 나을 수도 있습니다 .-print0xargs -0

얻은 코드는 인용되지 않은 출력을 가져와 이를 반복할 find단어 목록(공백으로 구분)으로 사용합니다 .for

답변2

for루프를 사용하는 대신 while다음을 사용하십시오.

find . -type d -print0 | while read -d '' -r dir; do echo "$dir"; done

옵션은 print0파일/디렉토리 이름 끝에 NULL 문자(개행 문자 대신)를 인쇄하고 read -d ''이를 올바르게 해석합니다.

답변3

예제에서는 "$file"을 사용할 수 있습니다.

답변4

답변에 답하기 전에 다음 두 가지 질문을 읽어 보시기 바랍니다.

문제의 경우 루프가 필요하지 않으며 for직접 찾으십시오.

find -type d

더 많은 작업을 수행하려면 -exec다음 옵션을 사용하세요(또는 지원이 -execdir있는 경우 find).

find -type d -exec ... +

관련 정보