Parece que você deseja a opção -maxdepth
.
encontre / home / code -maxdepth 2 -tipo d -name .git
Editado: Eu erroneamente deturpei meu problema. Um exemplo mais preciso agora aparece abaixo.
Gostaria de percorrer todos os diretórios de forma recursiva dentro de um diretório de destino e parar cada chamada recursiva depois que o primeiro diretório .git for encontrado.
Por exemplo, se tivermos estes caminhos:
/home/code/twitter/.git/
/home/code/twitter/some_file
/home/code/twitter/some_other_file
/home/code/facebook/.git/
/home/code/facebook/another_file
/home/code/configs/.git/
/home/code/configs/some_module/.git/
/home/code/configs/another_module/.git/
/home/code/some/unknown/depth/until/this/git/dir/.git/
/home/code/some/unknown/depth/until/this/git/dir/some_file
Eu quero apenas essas linhas no resultado:
/home/code/twitter
/home/code/facebook
/home/code/configs
/home/code/some/unknown/depth/until/this/git/dir/
O -maxdepth
não me ajudará aqui porque não sei o quão profundo o primeiro diretório .git será para cada subdiretório do meu destino.
Eu achei que find /home/code -type d -name .git -prune
faria isso, mas não está funcionando para mim. O que estou perdendo?
Parece que você deseja a opção -maxdepth
.
encontre / home / code -maxdepth 2 -tipo d -name .git
Encontre todos os diretórios que contenham um subdiretório .git:
find /home/code -type d -name .git -exec dirname {} \;
É complicado e o truque de recuo de -maxdepth não ajuda aqui, mas aqui está o que eu faria:
find /home/code -type d -name ".git" | grep -v '\.git/'
Em inglês: encontre todos os diretórios com o nome ".git" e filtre todas as ocorrências na lista de resultados que contenham ".git /" (ponto git barra).
A linha de comando acima funcionará em todos os sistemas unix, no entanto, se você puder afirmar que sua localização será "GNU find", então isso também funcionará:
find /home/code -type d -name ".git" ! -path "*/.git/*"
Divirta-se.
Tags command-line find linux unix