J'aimerais qu'une commande Linux trouve les fichiers modifiés dans les dernières n
secondes.
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?
J'aimerais qu'une commande Linux trouve les fichiers modifiés dans les dernières n
secondes.
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:
Utilisez la commande find comme celle-ci:
find . -name "*.txt" -mtime -60s
Pour trouver tous les *.txt
fichiers modifiés au cours des 60 dernières secondes.
-mtime
. "60s" n'est pas non plus une option valide dans POSIX ou GNU find. L'argument de -mtime
est un nombre qui spécifie le nombre de périodes de 24 heures précédant la modification d'un fichier.
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
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.
La façon la plus simple de le faire est:
find . -name "*.txt" -newermt '6 seconds ago'
L' -mtime -60s
option, mentionnée dans une réponse, ne fonctionne pas sur de nombreuses versions de find
, même en 2016. -newermt
est une bien meilleure option pour nous. Il peut analyser de nombreux formats de date et d'heure différents.
Une autre méthode utilisant mmin
est 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 find
versions.
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.
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'utilisers
comme argument.