Recientemente recibí este find
mensaje, pero no puedo explicar de dónde proviene la diferencia de los dos siguientes:
Ejemplo 1
[root@centos share]# find . -exec grep -i "madis" {} /dev/null \;
./names:Madison Randy:300:Product Development
Ejemplo 2
[root@centos share]# find . -exec grep -i "madis" {} \;
Madison Randy:300:Product Development
Como puede ver, en el primero está el archivo específico del que deriva esta cadena y, hasta ahora, realmente no puedo descubrir por qué sucede esto.
/dev/null
es para asegurarse de que todo lo que se agrega no se encontrará en el/dev/null
archivo (vacío) , de modo que solo se eliminen las ubicaciones correctas"/dev/null
no pierde tiempo buscando en un archivo ficticio no vacío. Y finalmente, la intención de buscar/dev/null
es obvia para aquellos familiarizados con este idioma.man grep
:La diferencia resulta de llamar a grep con uno o dos argumentos de archivo en los dos casos. En lugar de agregar
/dev/null
, puede llamargrep
con el argumento-H
. Tal vez el/dev/null
comportamiento es más ampliamente compatible.fuente
grep -H
no es portátil: el/dev/null
truco funciona sin GNU grep.El primer ejemplo es equivalente a ejecutar grep sobre dos archivos para cada archivo encontrado como resultado de la
find
expresión. Por ejemplo, sifind
encuentra tres archivosa.txt
,b.txt
yc.txt
luegogrep
se ejecutan comoA lo que
grep
se mostrará el nombre de archivo para el que coincide la salida. Como nada coincidirá con / dev / null, se garantiza que el nombre de archivo del primer archivo se imprimirá si coincide.Mientras que el segundo ejemplo es equivalente a
En cuyo caso, el nombre del archivo no se imprimirá para las coincidencias ya que solo hay un argumento.
fuente