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.