Para listar os diretórios raiz dos repositórios git, eu uso o seguinte:
find . -name .git -print0 | xargs -0 dirname
Uma variante encontra todas as pastas contendo .gitignore
:
find . -name .gitignore -print0 | xargs -0 dirname
Determinar repositórios git cuja raiz não contenha .gitignore
é simplesmente uma operação definida nos dois conjuntos de pastas:
comm -23 <(find . -name .git -print0 | xargs -0 dirname | sort) <(find . -name .gitignore -print0 | xargs -0 dirname | sort)
Isso compara os dois conjuntos de pastas (que devem ser classificados) e lista os que aparecem apenas no primeiro conjunto. A operação <()
é substituição de processo e permite que a saída de qualquer comando seja usada como entrada para outro comando em vez de um arquivo.
Substitua .gitignore
por .gitattributes
acima para encontrar os repositórios git que não contêm .gitattributes
em seu diretório raiz ...
Para obter o resultado final, combine os dois:
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)