Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/05/2018, à 22:28

alex2423

[find] l'option -mtime au comportement curieux

Bonjour,

J'aimerais vous parler de l'option -mtime dont j'ai du mal à comprendre son fonctionnement.

Dans le manuel  :

-mtime n
    Fichier dont les données ont été modifiées il y a n*24 heures

http://pwet.fr/man/linux/commandes/find

Ce qui veut dire :
- mtime 2 => fichier qui a été modifié il y a 2*24 heures, soit 2 jours.


Et pourtant :

J'ai un jeux de données sur 3 jours :

trusty@trusty-lap:~/Documents/test_bash$ ls -lrt
total 0
-rw-rw-r-- 1 trusty trusty 0 mai   15 20:00 fichier_15_2000
-rw-rw-r-- 1 trusty trusty 0 mai   15 23:00 fichier_15_2300
-rw-rw-r-- 1 trusty trusty 0 mai   16 20:00 fichier_16_2000
-rw-rw-r-- 1 trusty trusty 0 mai   16 23:00 fichier_16_2300
-rw-rw-r-- 1 trusty trusty 0 mai   17 20:00 fichier_17_2000
-rw-rw-r-- 1 trusty trusty 0 mai   17 23:00 fichier_17_2300

Et j'execute ma commande

trusty@trusty-lap:~/Documents/test_bash$ date ;find . -mtime +1| sort -r
vendredi 18 mai 2018, 22:10:53 (UTC+0200)
./fichier_16_2000
./fichier_15_2300
./fichier_15_2000

Nous sommes le vendredi 18 à 22h10, A J-1, nous sommes le jeudi 17 à 22h10. Donc si j'utilise l'option -mtime +1, je m'attends à sélectionner tous les fichiers ayant été modifié il y a plus de 24h, soit avant le jeudi 17 à 22h10
Avant le jeudi à 22h, j'ai 2 fichiers :

-rw-rw-r-- 1 trusty trusty 0 mai   16 23:00 fichier_16_2300
-rw-rw-r-- 1 trusty trusty 0 mai   17 20:00 fichier_17_2000

La consigne du manuel je selectionne de plus de n*24heures n'est pas respecté. La commande man devrait étre corrigé en :

-mtime n
    Fichier dont les données ont été modifiées il y a (n+1)*24 heures


Je viens de trouver un site qui va dans mon sens : http://www.piprime.fr/1378/exemples-uti … hell-find/
Souvent, avec la documentation que je trouve éronné, je me plante dans mes filtres temporelles. Il faut juste le savoir qu'il faut rajouter un +1 dans la doc. Dommage qu'ils n'ont pas été précis cette fois-ci

Hors ligne

#2 Le 19/05/2018, à 06:53

pingouinux

Re : [find] l'option -mtime au comportement curieux

Bonjour,
C'est parce que find ne tient compte que de la partie entière du nombre de jours.
Voici un extrait de man find (l'explication pour les arrondis est donnée pour -atime, mais c'est la même chose pour -mtime) :

-atime n
              File  was  last  accessed n*24 hours ago.  When find figures out how many
              24-hour periods ago the file was last accessed, any  fractional  part  is
              ignored, so to match -atime +1, a file has to have been accessed at least
              two days ago.

Hors ligne

#3 Le 22/05/2018, à 22:41

alex2423

Re : [find] l'option -mtime au comportement curieux

Merci pinguinnex pour l'explication. Cependant ce serait vraiment surprenant le fait ne pas gérer la partie décimale, ce qui voudrait quasiment tout le temps.

Dans ce cas, cela voudrait dire que la règle de gestion énoncée dans le manuel, "Fichier dont les données ont été modifiées il y a n*24 heures" est appliquée uniquement dans le cas ou le lancement de la commande find coincide parfaitement à l'heure et minutes des fichiers.
Exemple :
Des fichiers J-1 daté 22:34, une exécution de la commande J à 22:34. L'option mtime ne devrait pas faire un arrondit à l'entier supérieur.

Sincèrement je trouve leur explication tordu. Je vais faire quelques autres tests pour mieux comprendre

Hors ligne

#4 Le 23/05/2018, à 09:26

bruno

Re : [find] l'option -mtime au comportement curieux

Le même en français wink

manpages-fr  find  a écrit :

       -atime n
              Dernier accès au fichier il y a n*24 heures. Lorsque find calcule le nombre de périodes de 24 heures depuis
              lequel le fichier a été accédé, la partie fractionnelle est ignorée. Ainsi, pour correspondre à -atime  +1,
              un fichier doit avoir été accédé il y a au moins deux jours.

Si -atime n'est pas assez précis (modulo 24heures); il faut utiliser -amin

En ligne