Supposons que jai environ 10 000 fichiers dans un dossier. Jutilise crontab toutes les heures pour trouver les fichiers modifiés au cours des 60 dernières minutes, puis les traiter.
Appelez find -mmin -60
à 01:00:00
Supposons que le 1er fichier a été modifié à 00:00:00 et facilement trouvé par « find » à 01:00:00.
Ensuite, supposons que le 10 000e fichier ait également été modifié à 00:00:00
mais est maintenant à 01:10 : 00 et « find » travaille toujours dur pour atteindre le 10 000e fichier
Alors maintenant, 70 minutes plus tard, « find » retournera le 10 000e fichier qui a été modifié à 00:00:00?
Réponse
Dans GNU find
, lheure de référence qui sert à évaluer les fichiers avec -mmin
etc. sont calculés et stockés lorsque lexpression est analysée , donc en vigueur lorsque find
démarre.
Cela signifie que toutes ces comparaisons de temps utilisent la même référence de temps pour tous les fichiers évalués, lheure à laquelle find
a analysé sa ligne de commande.
Réponse
En supposant que GNU find, ceci est facilement testé:
% mkdir foo; cd foo; touch a b % find -mmin 1 . ./a ./b % find -mmin 1 -exec sleep 120 \; -print . # 2 minutes wait before this showed up ./a # another 2 minutes before this showed up ./b # and another 2 minutes for this one % find -mmin 1 %
Donc, même si b
a été modifié pour la dernière fois au moins 4 minutes après lexécution de find
sleep 120
pour a
, il correspond toujours.
Puisque -mmin
nest pas « t POSIX, cela dépend de limplémentation, mais je » mattendrais au comportement vu ci-dessus.
Commentaires
Réponse
Essayez la commande suivante lune après lautre dans deux terminaux
Terminal 1:
find /path -mmin -0.017 -printf "$(date) %Tc %p\n" | grep "/path/to/some/file"
Terminal 2:
touch -d " 0 seconds ago" /path/to/some/file
nous pouvons obtenir le résultat comme
Wed Jul 17 11:48:33 IST 2019 Wed 17 Jul 2019 11:48:34 AM IST /path/to/some/file
I » m préfixe lheure de début de la commande avec le résultat de la recherche. il montre que find
est capable de rechercher les fichiers qui sont modifiés après lheure de début de la commande.
find
sur mon Mac affiche également les deux fichiers avecfind . -mmin 1 -exec sleep 120 \; -print