find
actions também são testes, então você pode adicionar testes usando -exec
:
find . \( -exec [ -f {}/.git ] \; -prune \) -o \( -name .git -prune \) -o -print
Isso aplica três conjuntos de ações:
-
-exec [ -f {}/.git ] \; -prune
remove diretórios contendo um arquivo chamado.git
-
-name .git -prune
remove os diretórios com o nome.git
(para que o comando não pesquise no diretório principal.git
de um repositório) -
-print
imprime qualquer coisa que não tenha sido capturada pelo acima.
Para corresponder apenas aos diretórios, adicione -type d
, antes de -print
ou (para economizar tempo processando arquivos):
find . -type d \( \( -exec [ -f {}/.git ] \; -prune \) -o \( -name .git -prune \) -o -print \)
Isso também funciona quando ele é executado em um diretório diferente de .
, alterando o caminho find
start:
find /some/other/path -type d \( \( -exec [ -f {}/.git ] \; -prune \) -o \( -name .git -prune \) -o -print \)