Naiver Ansatz ist find dir1 dir2 dir3 -type d -name .git | xargs -I {} dirname {}
, aber es ist zu langsam für mich, weil ich viele tiefe Ordnerstrukturen in Git-Repositories habe (zumindest denke ich, dass dies der Grund ist). Ich habe darüber gelesen, dass ich verhindern kann prune
, dass Find in Verzeichnisse zurückkehrt, sobald es etwas gefunden hat, aber es gibt zwei Dinge. Ich bin mir nicht sicher, wie das funktioniert (ich meine, ich verstehe nicht, was prune
funktioniert, obwohl ich die Manpage gelesen habe) und das zweite würde in meinem Fall nicht funktionieren, weil es verhindern würde, dass find
es in einen .git
Ordner zurückkehrt, aber nicht in alle andere Ordner.
Was ich also wirklich brauche, ist:
Überprüfen Sie für alle Unterverzeichnisse, ob sie einen .git
Ordner enthalten, und beenden Sie die Suche in diesem Dateisystemzweig und melden Sie das Ergebnis. Es wäre perfekt, wenn dies auch versteckte Verzeichnisse von der Suche ausschließen würde.
getpof .git
ist was ich benutze. github.com/thrig/scripts/blob/master/filesys/getpof.c