¿Hay alguna forma de decir ack
que solo busque texto en la carpeta actual? (¿o especificar un max-depth
nivel?) ¿Y con grep
?
¿Hay alguna forma de decir ack
que solo busque texto en la carpeta actual? (¿o especificar un max-depth
nivel?) ¿Y con grep
?
Respuestas:
Usar -n
para no-recurse
:
$ ack -n foo
grep
no es recursivo de forma predeterminada, y debe usar el -r
indicador solo si desea una búsqueda recursiva.
Puede buscar en el directorio actual de la grep
siguiente manera:
$ grep -- foo *
Puede emparejar find con el argumento -exec. ejemplo:
find . -maxdepth 1 -exec grep foo {} \;
Esto se puede escalar, es decir -maxdepth 2
-maxdepth 1
) fue escalable. Por ejemplo -maxdepth 2
. No sé cómo describir la edición que hiciste como tal.
-maxdepth
) no es una sintaxis portátil / estándar (solo GNU y algunos BSD). Además, no tiene sentido usar \;
aquí (ejecute uno grep
por 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 2
seríafind . -path './*/*' -type d -prune -o -type f -exec ...
.
cuando no le da el -mindepth 1
), mientras que GNU grep
no intentará leer los directorios con -r
(se repite en ellos). Es posible que desee añadir un -d skip
a grep
(suponiendo grep de GNU) o mejor añadir ! -type d
a find
o incluso mejor -type f
(o -xtype f
asumiendo GNU find
) que es probable que no quiere grep
leer archivos que no son regulares.
grep -Hin
este enfoque para poder ver el nombre de archivo y la línea en la que está ocurriendo.
-n
no recurrir en absoluto.