A abordagem ingênua é find dir1 dir2 dir3 -type d -name .git | xargs -I {} dirname {}
, mas é muito lenta para mim, porque eu tenho muitas estruturas de pastas profundas nos repositórios git (pelo menos eu acho que esse é o motivo). Eu li sobre isso que posso usar prune
para impedir que o find seja recursivo em diretórios, uma vez que ele encontrou algo, mas há duas coisas. Não sei ao certo como isso funciona (quero dizer, não entendo o que prune
faz, embora tenha lido a página de manual) e o segundo não funcionaria no meu caso, porque impediria find
recursão na .git
pasta, mas não em todos outras pastas.
Então, o que eu realmente preciso é:
para todos os subdiretórios, verifique se eles contêm uma .git
pasta e se é, então pare de procurar nesta ramificação do sistema de arquivos e relate o resultado. Seria perfeito se isso também excluísse qualquer diretório oculto da pesquisa.
getpof .git
é o que eu uso. github.com/thrig/scripts/blob/master/filesys/getpof.c