Esta pergunta já tem respostas aqui :

Comentários

  • Há ' sa dezenas de perguntas sobre os problemas com o uso de -prune: pode ser um pouco confuso. Além disso, isso no stackoverflow descreve por que ' é tão chato de se usar.
  • Mesmo que esta seja uma fraude, a melhor resposta aqui é mais clara do que a melhor resposta na pergunta " correta ".
  • Hmm, " find -prune isn ' está funcionando para mim " parece certo diferente de " como eu excluo diretórios da saída de localização? " para mim …
  • @SamB Concordado , isso pode ' não ser uma duplicata.

Resposta

É para isso que serve a opção -prune:

find . -type d -name "avoid_this_directory_please" -prune -o -type f -print 

Basicamente, diz “se houver” um diretório chamado avoid_this_directory_please, não digite, caso contrário, se for “um arquivo normal, imprima seu nome de caminho”.

Comentários

  • eu ia escrever a mesma coisa, um pouco diferente, como find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \), mas gosto mais da sua sintaxe. Obrigado.
  • @TimKennedy Você provavelmente precisaria dos parênteses se quisesse find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print.
  • bom argumento. eu não ' nem sei quando / onde aprendi a fazer isso com os parênteses. essa idade se perde nas brumas do tempo. 🙂
  • Isso, é claro, removerá quaisquer diretórios chamados avoid_this_directory_please em qualquer lugar da árvore, não apenas nos de nível superior. -path permitiria mais controle nisso, como a página do manual ( citado abaixo por Xen2050) estados.
  • Eu não sabia que -prune considerava tudo após o primeiro find argumento, incluindo -type e ficou intrigado por não conseguir remover diretórios com find / -type f -path /proc -prune -o -name foo -print. Ver -type d e -type f no mesmo comando foi o que o fez clicar para mim. Agora, finalmente, sinto-me seguro para usar find, obrigado.

Resposta

Para evitar um diretório, tente o teste -path:

find . -type f ! -path "*/avoid_this_directory_please/*" 

Comentários

  • Observe que embora evite que arquivos dentro de avoid_this_directory_please sejam selecionados (a menos que seu caminho contenha caracteres inválidos), não impedirá find de descer lá . Esse ' é o motivo pelo qual -prune é melhor aqui.
  • Isso é muuuuito melhor do que usar prune. Eu sempre tenho que ler por meia hora para descobrir especificando o que eu não ' desejo para encontrar e, em seguida, emparelhar com a lógica OR para obter os arquivos que desejo.
  • @Merlin Depende obviamente do que você deseja alcançar. Com -prune, find ganhou ' nem mesmo olhou nos caminhos selecionados, enquanto com ! -path, ainda assim inseriria o caminho e examinaria tudo.

Resposta

De man find, na seção -path, aparentemente combinando as outras 2 respostas

To ignore a whole directory tree, use -prune rather than checking every file in the tree. For example, to skip the directory `src/emacs" and all files and directories under it, and print the names of the other files found, do something like this: find . -path ./src/emacs -prune -o -print 

Resposta

Experimente

find -name "*.js" -not -path "./directory/*" 

Comentários

  • Isso funciona se você estiver procurando apenas um tipo de extensão. O seguinte falhará: find -name "*.js" -o -name "*.css" -not -path "./directory/*"

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *