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.