검색할 때 어떻게 다른 디렉터리를 표시할 수 있나요?

검색할 때 어떻게 다른 디렉터리를 표시할 수 있나요?

예를 들어 *.txt라는 이름의 파일이 포함된 모든 디렉터리를 찾고 싶습니다. 그러나 출력에는 중복이 포함되어서는 안 됩니다. 어떻게 하나요?

답변1

노력하다:

find . -type f -name "*.txt" -printf '%h\n' | sort | uniq

작동 방식은 다음과 같습니다.

find . -type f -name "*.txt" -printf '%h\n'- ( )로 끝나는 모든 파일을 찾아 *.txt해당 디렉토리( %h)와 개행 문자를 인쇄합니다.

| sort- 디렉토리 정렬

| uniq- 중복 제거

답변2

POSIX 호환적용해야 할 코드어느파일 이름:

find . -name '*.txt' -printf '%h\0' | tr '\0\n' '\n\0' | sort -u | tr '\0\n' '\n\0'

답변3

문제는 디렉토리 이름에 개행 문자가 포함될 수 있으므로 find의 출력이 NUL로 끝나야 한다는 것입니다. 정렬된 결과에 대해 읽을 수 있는 출력 파이프라인을 가지려면 다음을 수행하십시오 tr.

find . -name "*.txt" -printf '%h\0' | sort -zu | tr '\0' '\n'

디렉터리 이름의 줄 바꿈은 ./디렉터리의 줄 바꿈으로 시작하지 않는 경우 다음 줄을 확인하여 확인할 수 있습니다.

답변4

findGNU 와 bash 사용

find . -type d -exec bash -c \
$'for f; do find \"$f\" -maxdepth 1 -type f  -name \'*.txt\' -printf \'%h\\n\' -quit; done'\
_ {} +

관련 정보