¿Cómo hacer una búsqueda de profundidad máxima en ack y grep?

32

¿Hay alguna forma de decir ackque solo busque texto en la carpeta actual? (¿o especificar un max-depthnivel?) ¿Y con grep?

Amelio Vazquez-Reina
fuente
1
No, ack no tiene una opción de profundidad máxima, aparte de -nno recurrir en absoluto.
Andy Lester

Respuestas:

22

Usar -npara no-recurse:

$ ack -n foo

grepno es recursivo de forma predeterminada, y debe usar el -rindicador solo si desea una búsqueda recursiva.

Puede buscar en el directorio actual de la grepsiguiente manera:

$ grep -- foo *
Eric Wilson
fuente
13
¿No responde la pregunta? (¿Qué pasa si quiero recurrir a una profundidad de 2)
Steven Lu
Buen punto, me perdí eso. ¿Alguna sugerencia?
Eric Wilson
29

Puede emparejar find con el argumento -exec. ejemplo:

find . -maxdepth 1 -exec grep foo {} \;

Esto se puede escalar, es decir -maxdepth 2

David Wilkins
fuente
Stephane, mi respuesta ( -maxdepth 1) fue escalable. Por ejemplo -maxdepth 2. No sé cómo describir la edición que hiciste como tal.
David Wilkins
no llegará a @stephane si no usa la @.
Braiam
44
Sí, lo siento, estoy de acuerdo en que mi edición fue demasiado intrusiva. Es posible que desee aclarar que that ( -maxdepth) no es una sintaxis portátil / estándar (solo GNU y algunos BSD). Además, no tiene sentido usar \;aquí (ejecute uno greppor archivo). Utilice grep -H foo {} +(específico de GNU) o grep foo /dev/null {} +(estándar) para asegurarse de que el nombre del archivo siempre se imprima. El equivalente estándar a -maxdepth 2seríafind . -path './*/*' -type d -prune -o -type f -exec ...
Stéphane Chazelas el
2
También tenga en cuenta que el suyo le dará mensajes de error para los directorios (incluso .cuando no le da el -mindepth 1), mientras que GNU grepno intentará leer los directorios con -r(se repite en ellos). Es posible que desee añadir un -d skipa grep(suponiendo grep de GNU) o mejor añadir ! -type da findo incluso mejor -type f(o -xtype fasumiendo GNU find) que es probable que no quiere grepleer archivos que no son regulares.
Stéphane Chazelas
44
Tiendo a usar grep -Hineste enfoque para poder ver el nombre de archivo y la línea en la que está ocurriendo.
GDP2