Questo è un po 'diverso dalla soluzione di Banthar, ma funzionerà con le versioni di find
che non supportano -newermt
e mostra come utilizzare il comando xargs
, che è uno strumento molto utile.
È possibile utilizzare il comando find
per individuare i file "di una certa età". Questo troverà tutti i file modificati tra i 5 ei 10 giorni fa:
find /directory -type f -mtime -10 -mtime +5
Per poi cercare i file per una stringa:
find /directory -type f -mtime -10 -mtime +5 -print0 |
xargs -0 grep -l expression
È anche possibile utilizzare l'interruttore -exec
, ma trovo più leggibile xargs
(e spesso funzionerà anche meglio, ma probabilmente non in questo caso).
(Si noti che la bandiera -0
è lì per lasciare questo comando operare su file con spazi incorporati, come ad esempio this is my filename
.)
Aggiornamento per la domanda nei commenti
Quando si fornisce molteplici espressioni di find
, sono ANDed insieme. Per esempio, se chiedete:
find . -name foo -size +10k
... find
restituirà solo i file che sono sia (a) di nome foo
e (b) più grande di 10 kbyte. Allo stesso modo, se si specifica:
find . -mtime -10 -mtime +5
... find
restituirà solo i file che sono (a) più recente di 10 giorni fa e (b) di età superiore a 5 giorni fa.
Per esempio, sul mio sistema è attualmente:
$ date
Fri Aug 19 12:55:21 EDT 2016
Ho i seguenti file:
$ ls -l
total 0
-rw-rw-r--. 1 lars lars 0 Aug 15 00:00 file1
-rw-rw-r--. 1 lars lars 0 Aug 10 00:00 file2
-rw-rw-r--. 1 lars lars 0 Aug 5 00:00 file3
Se chiedo per "i file modificati più di 5 giorni fa (-mtime +5
) I get:
$ find . -mtime +5
./file3
./file2
Ma se chiedo "file modificati più di 5 giorni fa ma meno di 10 giorni O"(-mtime +5 -mtime -10
), ottengo:
$ find . -mtime +5 -mtime -10
./file2
Una questione collegata a server Fault: http://serverfault.com/q/122824/ 36963 – brandizzi