동일한 이름의 파일이 포함된 디렉토리 트리가 있습니다. 예를 들면 다음과 같습니다.
a/file
a/...
a/b/file
x/a/file
x/a/...
x/b/file
나는 트리를 재귀적으로 검색할 때 먼저 오는 모든 경로를 얻기 위해 find
(with -exec
및 ) 를 사용하려고 합니다 . 내 예는 다음을 반환합니다.-prune
file
a/file
x/a/file
x/b/file
a/b/file
호출되는 파일이 file
이미 에 있기 때문에 반환되지 않습니다 a/
.
Bash를 사용하여 이를 어떻게 달성할 수 있나요?
답변1
find . -type d -exec sh -c '
f="$1"/file
[ -e "$f" ] && { printf "%s\n" "$f"; true; }
' find-sh {} \; -prune
file
파일을 찾는 대신 디렉터리를 찾아 각 디렉터리에 존재하는지 테스트했습니다. file
존재하는 경우 해당 경로를 인쇄하고 -prune
해당 디렉토리에 대해 활성화하십시오.
노트:
true
-prune
printf
어떤 이유로 실패 하더라도 해당 작업을 수행하는 것이 보장됩니다.이 솔루션에서는
find
아무 것도 처리되지 않습니다file
. 디렉터리만 처리됩니다. 로 무엇인가를 하고 싶다면file
내부 쉘에서 으로 할 수 있습니다$f
.예: 를 사용하면
… -prune -print
도구는 파일이 아닌 관련 디렉터리 경로 이름을 인쇄합니다. 내부 쉘에서 사용하는file
경로 를 인쇄합니다 .printf