Respuestas:
grep -r foo *
no busca coincidencias en archivos o directorios ocultos, también *
se expande por el shell, por lo que puede terminar con un error de lista de argumentos demasiado largo cuando hay muchas entradas en el directorio actual, o algunos otros errores o mal comportamiento si el El nombre de algunos de los archivos o directorios comienza con un guión.
La invocación grep -r foo .
no tiene los defectos anteriores
Actualizado:
Otra diferencia: la página de manual de grep (@ fedora17) dice:
-r, --recursive
Read all files under each directory, recursively, following symbolic links only if they
are on the command line. ...
También habrá una diferencia cuando ejecute este comando en un directorio vacío:
$ grep -r foo *; echo $?
grep: *: No such file or directory
2
$ grep -r foo .; echo $?
1
$
Si usa asterisco, no puede hacer coincidir archivos en directorios cuyo nombre comience con un punto, como .cache
.
Actualizar:
Esto se debe a que el *
shell lo expande antes de llamar grep
, por lo que recibe una lista de nombres en lugar de un solo nombre de directorio (para el actual .
). La cáscara manera expandir el patrón puede ser personalizado con el parámetro shell (como para nullglob
, nocaseglob
u otras bash
opciones) o ser variables de entorno (como LANG
o LC_ALL
)