Estoy buscando archivos en mi directorio de inicio que se modificaron en los últimos dos minutos y que también contienen una determinada cadena. Probé con este comando:
find -type d -mmin -2 -ls | grep -Ril "mystring"
Parece funcionar, pero aparentemente imprime solo aquellos archivos con la cadena dada dentro en lugar de los archivos modificados por última vez hace 2 minutos que contienen la cadena. Parece que la primera parte del comando no se ejecuta.
Respuesta aceptada:
Tuviste un buen intento con tu propia sugerencia
find -type d -mmin -2 -ls | grep -Ril "mystring"
Esto habría identificado directorios (-type d
) que se han modificado en los últimos dos minutos en lugar de archivos (-type f
). Canalización de la salida de -ls
a grep
normalmente habría buscado los nombres de archivo generados para mystring
. Sin embargo, en este caso el -R
flag cambia el comportamiento de grep
e ignora su lista de nombres de archivo, buscando en su lugar a través de cada archivo en y debajo del directorio actual.
Entonces, dividamos el problema en dos partes
-
Busque los últimos archivos modificados en los últimos 2 minutos en su directorio de inicio
find ~ -type f -mmin -2
-
[Archivos] que contienen una determinada Cadena
grep -Fl 'certain String' {files...}
Ahora tienes que juntarlos. El {}
es un marcador de posición para los nombres de archivo generados por find
del paso 1, y el final +
indica que el {}
se puede repetir varias veces , es decir, varios nombres de archivo
find ~ -type f -mmin -2 -exec grep -Fl 'certain String' {} +
Cambiando el grep
a echo grep
le mostrará lo que está ejecutando find
dominio; esta puede ser una técnica de depuración útil:
find ~ -type f -mmin -2 -exec echo grep -Fl 'certain String' {} +
Considere ejecutar man find
y man grep
para averiguar cuáles son las distintas opciones, como -F
y -l
en grep -Fl
, ya que de lo contrario no estás aprendiendo nada del ejercicio que te han propuesto; solo estás copiando una respuesta.