Excluindo diretórios aninhados com grep

4

Eu gostaria de excluir um diretório aninhado de minhas pesquisas grep, como /path/to/file . Por exemplo:

jake@jake-laptop:~/test$ egrep -r --exclude-dir="path" "hello" .
jake@jake-laptop:~/test$ egrep -r --exclude-dir="to" "hello" .
jake@jake-laptop:~/test$ egrep -r --exclude-dir="file" "hello" .
jake@jake-laptop:~/test$ egrep -r --exclude-dir="path/to/file" "hello" .
./path/to/file/f.txt:hello

Na última linha, o arquivo não é excluído, aparentemente porque eu tenho vários diretórios aninhados fornecidos com o argumento exclude-dir . Como posso obter o último exemplo para excluir pesquisas no diretório path/to/file ?

    
por Jake 31.08.2015 / 02:59

1 resposta

4

Parece que --exclude-dir é comparado apenas com o nome de base do caminho, ou seja, o subdiretório atual. Portanto, path / to / file nunca corresponderá ao "arquivo", mas apenas --exclude-dir=file , ou uma versão glob, por exemplo --exclude-dir=*ile .

A alternativa usual é usar find , por exemplo, se ele manipular a opção -path :

find . -path ./path/to/file -prune -o -type f -exec egrep -l 'hello' {} +

O padrão após -path precisa corresponder ao caminho, incluindo seu diretório inicial, mas você pode usar globs para simplificar, por exemplo, '*path*file*' , onde * corresponde / também.

Caso contrário, você pode recorrer a find | sed | xargs egrep .

    
por 31.08.2015 / 07:31

Tags