".git" 디렉터리의 하위 경로에 없는 디렉터리만 나열하려면 어떻게 해야 합니까?

".git" 디렉터리의 하위 경로에 없는 디렉터리만 나열하려면 어떻게 해야 합니까?

현재 경로의 .git/ 디렉토리 외부 디렉토리만 나열하고 싶습니다.

나는 이것을 시도하고 있습니다 :

find . -path "**/.git" -prune -o -print -type d

.git 디렉터리는 제외되지만 코드 조각에는 파일도 나열됩니다. 그러나 그것은 내가 지정한 것과 같지 않아야 합니다 -type d. 이 find유틸리티를 제가 설명한 대로 작동하게 하려면 어떻게 해야 합니까 ?

답변1

-print-type d이전 에 사용했으므로 find첫 번째 표현식을 만족하지 않는 모든 항목이 인쇄됩니다.

당신은 그들을 교환하고 싶습니다 :

find . -path '*/.git' -prune -o -type d -print

또는 생략할 수 있도록 술어를 사용하십시오 -print.

find . ! \( -path '*/.git' -o -path '*/.git/*' \) -type d

또한 별표는 하나만 사용해야 하며 */.git, 별표 두 개는 **패턴 일치에 특별한 의미가 없습니다 find. -name대신 다음을 사용하면 더 간단하고 이식성이 뛰어나며 약간 더 빠르게 만들 수 있습니다 -path.

find . -name .git -prune -o -type d -print

답변2

find명령에 대한 지식이 부족하여 덜 효율적이지만 아마도 똑같이 유용하고 아마도 더 읽기 쉬운 한 줄을 사용했습니다 grep.

find . -type d | grep -v "/\.git"

관련 정보