É possível excluir um diretório do comando find? [duplicado]

20

Estou usando o comando find -type f para localizar recursivamente todos os arquivos de um determinado diretório inicial. No entanto, eu gostaria de ter alguns diretórios impedidos de entrar e extrair nomes de arquivos dentro. Então, basicamente eu estou procurando por algo como:

find . -type f ! -name "avoid_this_directory_please"

Existe uma alternativa funcional para isso?

    
por user219860 08.03.2017 / 22:06

4 respostas

22

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

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

Isso basicamente diz "se houver um diretório chamado avoid_this_directory_please , não insira, caso contrário, se for um arquivo, imprima seu nome".

    
por 08.03.2017 / 22:17
6

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

find . -type f ! -path '*/avoid_this_directory_please/*'
    
por 08.03.2017 / 22:16
4

Tente isso

find -name "*.js" -not -path "./directory/*"
    
por 09.03.2017 / 07:48
3

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
    
por 08.03.2017 / 22:22

Tags