Si entro /etc/apache2/
y escribo grep -rl 'LoadModule php' ./*
, solo veré ./mods-available/php7.0.load
. Si cambio r
a R
entonces veré
./mods-available/php7.0.load
./mods-enabled/php7.0.load
Ambos son directorios simples. Esperaría -r
que grep recurra a todos los archivos/directorios en el PWD. ¿Qué está pasando con -r
? Estoy pensando en usarlo siempre -R
en este punto.
Respuesta1
De acuerdo apágina de manual de grep:
-r, --recursivo
Lea todos los archivos en cada directorio, de forma recursiva, siguiendo enlaces simbólicos solo si están en la línea de comando. Tenga en cuenta que si no se proporciona ningún operando de archivo, grep busca en el directorio de trabajo. Esto es equivalente a la opción -d recursiva.-R, --desreferencia-recursiva
Lea todos los archivos de cada directorio de forma recursiva. Siga todos los enlaces simbólicos, a diferencia de -r.
Ejemplo:
tengo una carpetapruebaen el que hay un archivo1.texto.2.textoes un enlace simbólico a1.textotal que la salida de ls -l test
se parece a:
-rw-r--r-- 1 kulfy kulfy 15 Jun 12 21:53 1.txt
lrwxrwxrwx 1 kulfy kulfy 5 Jun 12 21:53 2.txt -> 1.txt
El contenido de1.textoes:
This is a file.
Si quiero buscar"archivo"cadena en archivos dentropruebacarpeta y ejecuto:
grep "file" test
Me encontraré con un error:
grep: test: Is a directory
Pero si lo hago:
grep -R "file" test
Obtengo una salida:
test/2.txt:This is a file
test/1.txt:This is a file
Por otro lado si ejecuto:
grep -r "file" test
Obtengo salida:
test/1.txt:This is a file
Aquí, no he mencionado explícitamente escanear todos los archivos. Entonces, cuando usé R
bandera, enlace simbólico (aquí2.texto) se respetó y se generaron resultados. Pero cuando usé r
la bandera, el enlace simbólico fue ignorado simplemente porque no mencioné escanear.2.textotambién.
Respuesta2
De GNU grepv2.11-8 y superiores,si se invoca con-r
excluye enlaces simbólicosno especificado en la línea de comando y los incluye cuando se invoca con -R
(fuente).
Depágina del manual ( man grep
):
-r
,--recursive
Lea todos los archivos en cada directorio, de forma recursiva, siguiendo enlaces simbólicos solo si están en la línea de comando. Tenga en cuenta que si no se proporciona ningún operando de archivo, grep busca en el directorio de trabajo. Esto es equivalente a la opción -d recursiva.
-R
,--dereference-recursive
Lea todos los archivos de cada directorio de forma recursiva. Siga todos los enlaces simbólicos,a diferencia de-r
.