Como listar apenas os diretórios que não estão em um subcaminho do diretório '.git'?

0

Eu quero listar apenas os diretórios que não estão dentro de um diretório .git / no meu caminho atual.

Estou tentando isso:

find . -path "**/.git" -prune -o -print -type d

Os diretórios .git são excluídos, mas o fragmento também está listando arquivos. Mas não deveria como eu especifiquei -type d . Como fazer o utilitário find se comportar como eu descrevi?

    
por ninrod 25.02.2016 / 00:09

2 respostas

3

Você usou -print antes de -type d , por isso find imprime todas as coisas que não satisfizeram a primeira expressão.

Você deseja trocá-los:

find . -path '*/.git' -prune -o -type d -print

ou usando somente predicado, para que você possa omitir -print :

find . ! \( -path '*/.git' -o -path '*/.git/*' \) -type d

Observe também que você só precisa usar um asterisco */.git , o asterisco duplo ** não tem um significado especial para find padrão de correspondência. E você pode torná-lo mais simples, mais portátil e um pouco mais rápido usando -name em vez de -path :

find . -name .git -prune -o -type d -print
    
por 25.02.2016 / 00:53
-1

Devido à falta de conhecimento do comando find , eu uso apenas um one-liner menos eficiente, mas provavelmente igualmente útil e provavelmente mais legível, que também envolve grep :

find . -type d | grep -v "/\.git"
    
por 25.02.2016 / 07:20

Tags