Comando Linux per trovare i file modificati negli ultimi n secondi


19

Vorrei che un comando Linux trovasse i file modificati negli ultimi nsecondi.

Esiste uno script della shell o un altro strumento che posso eseguire dall'interfaccia della riga di comando o dalla GUI?

Risposte:


14

Utilizzare il comando find in questo modo:

find . -name "*.txt" -mtime -60s

Per trovare tutti i *.txtfile modificati negli ultimi 60 secondi.


17
In Linux, usando find (da GNU Findutils 4.4.2), ottengo un errore con questo comando: find: missing argument to `-mtime'. Tuttavia, posso ottenere il comportamento desiderato usando -mmin e un argomento decimale. Non sono riuscito a trovare alcun riferimento nella manpage da trovare scome argomento.
dr jimbob,

4
-60s non è un argomento valido per -mtime. Né "60s" è nemmeno un'opzione valida in POSIX o GNU find. L'argomento a -mtimeè un numero che specifica il numero di periodi di 24 ore fa quando un file è stato modificato.
dannysauer,

13

La soluzione con mtime che specifica i secondi non funziona sui miei sistemi Linux che usano find --version== find (GNU findutils) 4.4.2.

Ottengo il seguente errore:

mycomputer:~/new$ find . -mtime -60s
find: missing argument to `-mtime'
mycomputer:~/new$ find . -mtime -60seconds
find: missing argument to `-mtime'

Tuttavia, posso usare -mmin(per essere modificato negli ultimi m minuti) e posso accettare un argomento decimale; ad esempio, i seguenti file vengono modificati negli ultimi 30 secondi.

find . -mmin 0.5

Quindi per esempio; la creazione di file 1s, 6s, 11s, ... ultima modifica negli ultimi 120 secondi, questo comando trova:

mycomputer:~/new$ for i in $(seq 1 5 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
mycomputer:~/new$ find . -mmin 0.5
.
./last_modified_1_seconds_ago
./last_modified_26_seconds_ago
./last_modified_11_seconds_ago
./last_modified_16_seconds_ago
./last_modified_21_seconds_ago
./last_modified_6_seconds_ago

Quindi se ne hai davvero bisogno in pochi secondi puoi fare qualcosa del tipo:

localhost:~/new$ for i in $(seq 1 1 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
localhost:~/new$ N=18; find . -mmin $(echo "$N/60"|bc -l)
./last_modified_1_seconds_ago
./last_modified_9_seconds_ago
./last_modified_14_seconds_ago
./last_modified_4_seconds_ago
./last_modified_12_seconds_ago
./last_modified_13_seconds_ago
./last_modified_8_seconds_ago
./last_modified_3_seconds_ago
./last_modified_5_seconds_ago
./last_modified_11_seconds_ago
./last_modified_17_seconds_ago
./last_modified_16_seconds_ago
./last_modified_7_seconds_ago
./last_modified_15_seconds_ago
./last_modified_10_seconds_ago
./last_modified_6_seconds_ago
./last_modified_2_seconds_ago

8

Simile a ciò che Glenn ha suggerito, se vuoi trovare tutto modificato, diciamo, nel momento in cui è stato eseguito un processo di installazione, potrebbe essere più facile fare qualcosa del tipo:

touch /tmp/checkpoint
<do installer stuff>
find / -newer /tmp/checkpoint

Quindi non devi fare il calcolo del tempo; trovi solo cose cambiate dopo il file del checkpoint.


6

Se hai una versione di find che non supporta, -mtime -60sallora una soluzione migliore è

touch -d '-60 seconds' /tmp/newerthan
find . -name "*.txt" -newer /tmp/newerthan

6

Il modo più semplice per farlo è:

find . -name "*.txt" -newermt '6 seconds ago'

L' -mtime -60sopzione, menzionata in una risposta, non funziona su molte versioni find, nemmeno nel 2016. -newermtè un'opzione molto migliore per noi. Può analizzare diversi formati di data e ora.

Un metodo alternativo che utilizza mminè questo:

find . -name "*.txt" -mmin -0.5

# Finds files modified within the last 0.5 minute, i.e. last 30 seconds

Questa opzione potrebbe non funzionare per tutte le findversioni.


2
Questa è chiaramente la soluzione migliore.
Rednoah,

1

Se stai monitorando una directory per le modifiche ai file, probabilmente vorrai usare inotify-tools invece di un ciclo di polling infinito.


1

Se la tua versione di findnon accetta secondi o valori reali, proprio come il mio, usa -mmin, ma specifica 0 e otterrai tutti i file modificati in meno di un minuto:

$ touch test; find . -type f -mmin 0
./test
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.