Recentemente, recebi essa find
linha, mas não sou capaz de explicar de onde vem a diferença dos dois abaixo:
Exemplo 1
[root@centos share]# find . -exec grep -i "madis" {} /dev/null \;
./names:Madison Randy:300:Product Development
Exemplo 2
[root@centos share]# find . -exec grep -i "madis" {} \;
Madison Randy:300:Product Development
Como você pode ver, no primeiro existe o arquivo específico do qual essa string é derivada e, até agora, não sou capaz de descobrir por que isso está acontecendo.
/dev/null
é ter certeza de que o que estiver em grep-ed não será encontrado no/dev/null
arquivo (vazio) , para que apenas os locais corretos sejam gerados"/dev/null
você não perde tempo pesquisando um arquivo fictício não vazio. E, finalmente, a intenção de pesquisar/dev/null
é óbvia para aqueles familiarizados com esse idioma.man grep
:A diferença resulta do grep ser chamado com um ou dois argumentos de arquivo nos dois casos. Em vez de adicionar
/dev/null
você poderia chamargrep
com o argumento-H
. Talvez o/dev/null
comportamento seja mais amplamente suportado.fonte
grep -H
não é portátil - o/dev/null
truque funciona sem o GNU grep.O primeiro exemplo é equivalente à execução do grep em dois arquivos para cada arquivo encontrado como resultado da
find
expressão. Por exemplo, sefind
encontrar três arquivos ea.txt
, em seguida, será executado comob.txt
c.txt
grep
Ao qual
grep
irá mostrar o nome do arquivo para o qual a saída corresponde. Como nada corresponderá ao / dev / null, é garantido que o nome do arquivo do primeiro arquivo seja impresso se corresponder.Visto que o segundo exemplo é equivalente a
Nesse caso, o nome do arquivo não será impresso para correspondências, pois há apenas um argumento.
fonte