find -type d -iname .git -not -iname old
Isso corresponde aos diretórios que são chamados de .git
e não são chamados de old
. Como um diretório chamado .git
não pode ser chamado de old
, a parte -not -iname old
pode ser removida sem alterar o significado do comando.
-not
diz "não combina", mas não "não recorre". Há uma maneira diferente de dizer "não recorrer": é uma ação chamada -prune
. O comando a seguir significa "percorrer todos os diretórios recursivamente ( find
), mas parar em diretórios chamados old
( -iname old -prune
) e imprimir diretórios chamados .git
":
find -iname old -prune -o -type d -iname .git -print
Isso é analisado como ( -iname old -prune ) -o ( -type d -iname .git -print )
. Localizar é solicitado a procurar arquivos que atendam às condições -iname old
ou ( -o
) -type d -iname .git
. Quando um arquivo atende à primeira condição, a ação -prune
(remoção da árvore percorrida, ou seja, não recurse) é executada. Quando um arquivo atende à segunda condição, a ação -print
é executada. Como a impressão é a ação padrão, você pode omitir -print
.