* Por que * o uso de / dev / null em find / grep exibe o nome do arquivo?

2
find . -name "*.java" -exec grep "foo" {} \;

Isto apenas imprime correspondências, sem nome de arquivo.

find . -name "*.java" -exec grep "foo" /dev/null {} \;

Mas isso também imprime o nome do arquivo.

Por quê? Quais são as mecânicas de find / grep que fazem com que o nome do arquivo seja impresso quando o / dev / null é inserido no mix?

PS - sim, eu sei que posso fazer "grep -H"

    
por Jonathan 13.05.2010 / 14:38

2 respostas

5

Se você não usar nem a opção -h nem a opção -H, o grep gravará o nome do arquivo se mais de um arquivo for fornecido como argumentos. Então, se você adicionar / dev / null como argumento ao grep, você sempre terá mais de um, então o nome do arquivo sempre será escrito. Mas sim, usar co grep -H é a maneira mais segura de ter sempre o nome do arquivo escrito.

    
por 13.05.2010 / 14:47
1

Eu diria que grep , ao pesquisar vários arquivos, exibirá o nome do arquivo na frente da linha correspondente para diferenciar o local em que encontrou a linha. Caso contrário, se apenas um arquivo for especificado, o usuário já sabe em qual arquivo a linha seria encontrada.

Use grep -h para desativar nomes de arquivos na saída e grep -H para forçá-los.

    
por 13.05.2010 / 15:40

Tags