.gitattributes
기본적으로 루트 디렉터리에 파일도 없고 파일도 없는 모든 git 저장소를 찾고 싶습니다 ..gitignore
이전에 찾은 적이 있지만 find . -type d '!' -exec test -e "{}/.gitignore" ';' -print
최상위 git 디렉토리뿐만 아니라 모든 디렉토리가 나열되어 있습니다.
내 디렉토리 트리는 다음과 같습니다.
GitHub
├─ _Clones
| ├─ repo1 (has .gitignore)
| └─ repo2
├─ _Forks
| ├─ repo1 (has .gitattributes)
| └─ _For-Later
| ├─ repo2
| └─ repo3
├─ myrepo1 (has both)
├─ myrepo2 (has both)
...
└─ myrepo10
_Clones\repo2
이와 같은 레이아웃에서는 출력이 , 및 가 되기를 원합니다 ._Forks\_For-Later\repo2
_Forks\_For-Later\repo3
myrepo10
매개변수를 이용해 찾아보았 depth
으나 디렉토리별 변수입니다!
답변1
git 저장소의 루트 디렉터리를 나열하려면 다음 명령을 사용합니다.
find . -name .git -print0 | xargs -0 dirname
Variant는 다음을 포함하는 모든 폴더를 찾습니다 .gitignore
.
find . -name .gitignore -print0 | xargs -0 dirname
루트 디렉터리에 포함되지 않은 git 저장소를 확인하려면 .gitignore
두 가지 폴더 세트만 설정하면 됩니다.
comm -23 <(find . -name .git -print0 | xargs -0 dirname | sort) <(find . -name .gitignore -print0 | xargs -0 dirname | sort)
이는 두 개의 폴더 세트(정렬해야 함)를 비교하고 첫 번째 세트에만 나타나는 폴더를 나열합니다. 작업 <()
은프로세스 교체그리고 모든 명령의 출력을 파일 대신 다른 명령의 입력으로 사용할 수 있습니다.
루트 디렉토리에 포함되지 않은 git 저장소를 .gitignore
찾으려면 위와 같이 바꾸십시오 ..gitattributes
.gitattributes
원하는 최종 출력을 얻으려면 다음 두 가지를 결합하십시오.
comm -23 <(comm -23 <(find . -name .git -print0 | xargs -0 dirname | sort) <(find . -name .gitignore -print0 | xargs -0 dirname | sort)) <(find . -name .gitattributes -print0 | xargs -0 dirname | sort)