Estoy utilizando satisfactoriamente find para crear una lista de todos los archivos en el subdirectorio actual, excluyendo aquellos en el subdirectorio "caché". Aquí está mi primer bit de código:Tubería encuentra resultados en grep para la rápida exclusión de directorio
find . -wholename './cach*' -prune -o -print
Ahora deseo canalizar esto en un comando grep. Parece que debería ser simple:
find . -wholename './cach*' -prune -o -print | xargs grep -r -R -i "samson"
... pero esto está devolviendo resultados que son en su mayoría del directorio de caché. He intentado eliminar la referencia de xargs, pero eso hace lo que cabría esperar, ejecutando grep en el texto de los nombres de los archivos, en lugar de en los archivos. Mi objetivo es encontrar "samson" en cualquier archivo que no esté en el contenido almacenado en caché.
Probablemente voy a solucionar este problema simplemente usando grep dobles en este caso, pero tengo mucha curiosidad acerca de por qué este one-liner se comporta de esta manera. Me encantaría escuchar ideas sobre una forma de modificarlo sin dejar de utilizar estos dos comandos (ya que hay ventajas de velocidad para hacerlo de esta manera).
(Esto está en CentOS 5, por cierto.)
¡Gracias! La eliminación de la recursividad es lo que hizo el truco para mí. (Los viejos hábitos se vuelven difíciles. Por cierto, eso fue un error por mi parte, ya que suelo usar "-r -i -I", lo que tiene mucho más sentido que las banderas de recursividad redundantes). La parte de "nombre completo" estaba bien, ya que el subdirectorio no deseado se encuentra en el nivel raíz del directorio actual. Así que ahora es: 'encontrar. -wholename './cach*' -prune -o -print | xargs grep -i -I "samson" ' – eternalnewb
Impresionante, me alegro de que fuera algo simple =] – newfurniturey