Estoy revisando una gran pila de código administrado por git, y cada vez que hago una grep, veo montones y montones de mensajes de la forma:
> grep pattern * -R -n
whatever/.git/svn: No such file or directory
¿Hay alguna forma de que esas líneas desaparezcan?

ag,acko en sucgreplugar, son mucho más rápidos / mejores quegreppara buscar repositorios de código.No such file or directorymensajes para archivos y / o directorios que existen? O, por el contrario, ¿cómo segrep *pueden obtener nombres de archivos que no existen? ¿Es esta una condición de carrera, donde algún otro proceso manipula el árbol de directorios (creación, cambio de nombre y eliminación de archivos) mientrasgrepse ejecuta?Respuestas:
Puede usar el indicador
-so--no-messagespara suprimir errores.fuente
/bin/ls -1 | xargs grep 'some text'le dará "no existe tal archivo o directorio" porque divide 'a b.txt' en 2 args. Si suprime, no notará que perdió un archivo.findy usoprint0conxargs -0¿ Eso resuelve el problema? GraciasSi estás navegando por un repositorio de git, te recomiendo que lo uses
git grep. No necesita pasar-Rni el camino.Eso mostrará todas las coincidencias desde su directorio actual hacia abajo.
fuente
Ggreptambién busca desde la parte superior del directorio Git en lugar del directorio actual.Errores como ese generalmente se envían a la secuencia de "error estándar", que puede canalizar a un archivo o simplemente hacer desaparecer en la mayoría de los comandos:
fuente
He visto que sucede varias veces, con enlaces rotos (enlaces simbólicos que apuntan a archivos que no existen), grep intenta buscar en el archivo de destino, que no existe (de ahí el mensaje de error correcto y preciso).
Normalmente no me molesto mientras hago tareas de administrador de sistemas en la consola, pero desde dentro de los scripts busco archivos de texto con "buscar", y luego grep cada uno:
En vez de:
fuente
Por lo general, no dejo que grep haga la recursión en sí. Por lo general, hay algunos directorios que desea omitir (.git, .svn ...)
Puedes hacer alias inteligentes con posturas como esa:
A primera vista puede parecer excesivo, pero cuando necesita filtrar algunos patrones es bastante útil.
fuente
-execantes grep.\( -name .svn -o -name .git \)¿Has probado la
-0opción en xargs ? Algo como esto:fuente
find -print0 | xargs -0 grep 'text'Uso
-Ien grep.Ejemplo:
grep SEARCH_ME -Irs ~/logs.fuente
-Iomite archivos binarios, es equivalente a--binary-files=without-match. Sin embargo, no suprime los mensajes "No existe tal archivo o directorio".Redirijo
stderrastdouty luego uso grep's invert-match (-v) para excluir la cadena de advertencia / error que quiero ocultar:fuente