Commande Linux pour rechercher les fichiers modifiés au cours des n dernières secondes


19

J'aimerais qu'une commande Linux trouve les fichiers modifiés dans les dernières nsecondes.

Existe-t-il un script shell ou un autre outil que je peux exécuter à partir de l'interface de ligne de commande ou de l'interface graphique?

Réponses:


14

Utilisez la commande find comme celle-ci:

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

Pour trouver tous les *.txtfichiers modifiés au cours des 60 dernières secondes.


17
Dans linux, en utilisant find (de GNU Findutils 4.4.2), je reçois une erreur avec cette commande: find: missing argument to `-mtime'. Cependant, je peux obtenir le comportement souhaité en utilisant -mmin et un argument décimal. Je n'ai trouvé aucune référence dans la page de manuel pour trouver pour l'utiliser scomme argument.
— dr jimbob

4
-60s n'est pas un argument valable pour -mtime. "60s" n'est pas non plus une option valide dans POSIX ou GNU find. L'argument de -mtimeest un nombre qui spécifie le nombre de périodes de 24 heures précédant la modification d'un fichier.
— dannysauer

13

La solution avec mtime spécifiant les secondes ne fonctionne pas sur mes systèmes linux qui utilisent find --version== find (GNU findutils) 4.4.2.

J'obtiens l'erreur suivante:

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

Cependant, je peux utiliser -mmin(pour modifié dans les dernières minutes m), et peut-il prendre un argument décimal; Par exemple, ce qui suit trouve les fichiers modifiés au cours des 30 dernières secondes.

find . -mmin 0.5

Ainsi, par exemple; en créant les fichiers modifiés en dernier 1s, 6s, 11s, ... il y a 120 secondes, cette commande trouve:

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

Donc, si vous en avez vraiment besoin en quelques secondes, vous pouvez faire quelque chose comme:

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

Semblable à ce que Glenn a suggéré, si vous voulez que tout soit modifié, par exemple, pendant la durée d'un processus d'installation, il pourrait être plus facile de faire quelque chose comme:

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

Ensuite, vous n'avez pas à faire le calcul du temps; vous trouvez juste que les choses ont changé après le fichier de point de contrôle.


6

Si vous avez une version de find qui ne prend pas en charge, -mtime -60salors une meilleure solution est

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

6

La façon la plus simple de le faire est:

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

L' -mtime -60soption, mentionnée dans une réponse, ne fonctionne pas sur de nombreuses versions de find, même en 2016. -newermtest une bien meilleure option pour nous. Il peut analyser de nombreux formats de date et d'heure différents.

Une autre méthode utilisant mminest la suivante:

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

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

Cette option peut ne pas fonctionner pour toutes les findversions.


2
C'est clairement la meilleure solution.
— rednoah

1

Si vous surveillez un répertoire pour les modifications des fichiers, vous voudrez probablement utiliser inotify-tools au lieu d'une boucle d'interrogation infinie.


1

Si votre version de findn'accepte pas les secondes ou les valeurs réelles, tout comme la mienne, utilisez -mmin, mais spécifiez 0, et vous obtiendrez tous les fichiers modifiés en moins d'une minute:

$ touch test; find . -type f -mmin 0
./test
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.