Como excluir o tipo de arquivo em find, exec e grep?

2

Estou tentando descobrir o arquivo no qual o sinalizador a seguir é usado - TRACE_WANTED ". No entanto, não quero que o find pesquise esse sinalizador em .c e .h. Como posso emitir um comando para excluir o find dos arquivos * .c e * .h.

Aqui está o comando típico que estou usando -

find ./ -iname  *.c -exec grep -iHrn  TRACE_WANTED {} \;
    
por dexterous_stranger 19.10.2015 / 22:42

3 respostas

6

O GNU grep tem a capacidade de excluir globs de suas pesquisas recursivas incorporadas. Tente:

grep -iHrn  --exclude='*.c' --exclude='*.h' TRACE_WANTED

Isso procura recursivamente a partir do diretório atual, assim como o comando find . Exclui todos os arquivos *.c e *.h .

    
por 19.10.2015 / 22:50
2

Se tudo que você precisa é encontrar os arquivos que contém a palavra TRACE_WANTED, excluindo os arquivos * .c e * .h, você nem precisa usar find , grep sozinho pode fazer isso trabalhe para você:

 grep -r --exclude={"*.c","*.h"} TRACE_WANTED ./

As aspas são desnecessárias no bash, mas necessárias em zsh por padrão.

    
por 19.10.2015 / 22:53
1
find . ! -name '*.[ch]' -type f -exec grep -l TRACE_WANTED {} +

Ou se você puder usar uma pesquisa grep with -r ecursive:

grep -lr --exclude='*.[ch]' TRACE_WANTED
    
por 20.10.2015 / 01:29

Tags