Usando o comando find do Unix para encontrar diretórios correspondentes, mas não subdiretórios com o mesmo nome

7

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?

    
por Gabe Hollombe 01.04.2014 / 14:06

3 respostas

6

Parece que você deseja a opção -maxdepth .

encontre / home / code -maxdepth 2 -tipo d -name .git

    
por 01.04.2014 / 14:11
2

Encontre todos os diretórios que contenham um subdiretório .git:

find /home/code -type d -name .git -exec dirname {} \;
    
por 02.04.2014 / 11:29
1

É 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.

    
por 01.04.2014 / 21:11