Sto cercando file nella mia home directory che sono stati modificati negli ultimi due minuti che contengono anche una determinata stringa. Ho provato con questo comando:
find -type d -mmin -2 -ls | grep -Ril "mystring"
Sembra funzionare ma a quanto pare stampa solo quei file con la stringa data all'interno piuttosto che i file modificati l'ultima volta 2 minuti fa che contengono la stringa. Sembra che la prima parte del comando non sia stata eseguita.
Risposta accettata:
Hai fatto un buon tentativo con il tuo suggerimento
find -type d -mmin -2 -ls | grep -Ril "mystring"
Questo avrebbe identificato le directory (-type d
) che erano stati modificati negli ultimi due minuti anziché i file (-type f
). Piping dell'output di -ls
a grep
di solito avrebbe cercato mystring
nei nomi dei file generati . Tuttavia, in questo caso il -R
flag cambia il comportamento di grep
e ignora il tuo elenco di nomi di file, cercando invece in tutti i file nella directory corrente e al di sotto.
Quindi, dividiamo il problema in due parti
-
Cerca gli ultimi file modificati negli ultimi 2 minuti nella tua home directory
find ~ -type f -mmin -2
-
[File] che contengono una determinata stringa
grep -Fl 'certain String' {files...}
Ora devi metterli insieme. Il {}
è un segnaposto per i nomi di file generati da find
dal passaggio 1 e il +
finale indica che il {}
può essere ripetuto più volte , ovvero diversi nomi di file
find ~ -type f -mmin -2 -exec grep -Fl 'certain String' {} +
Modifica del grep
su echo grep
ti mostrerà cosa viene eseguito da find
comando; questa può essere un'utile tecnica di debug:
find ~ -type f -mmin -2 -exec echo grep -Fl 'certain String' {} +
Si prega di considerare l'esecuzione di man find
e man grep
per scoprire quali sono le varie opzioni, come il -F
e -l
in grep -Fl
, altrimenti non stai imparando nulla dall'esercizio che ti è stato impostato; stai solo copiando una risposta.