GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi Find -mtime +1 ne renvoie-t-il que les fichiers de plus de 2 jours ?

J'ai du mal à comprendre pourquoi le find interprète les heures de modification des fichiers comme il le fait. Plus précisément, je ne comprends pas pourquoi le -mtime +1 n'affiche pas les fichiers datant de moins de 48 heures.

Comme exemple de test, j'ai créé trois fichiers de test avec différentes dates de modification :

[[email protected]obox findtest]# ls -l
total 0
-rw-r--r-- 1 root root 0 Sep 25 08:44 foo1
-rw-r--r-- 1 root root 0 Sep 24 08:14 foo2
-rw-r--r-- 1 root root 0 Sep 23 08:14 foo3

J'ai ensuite exécuté find avec le -mtime +1 switch et a obtenu le résultat suivant :

[[email protected] findtest]# find -mtime +1
./foo3

J'ai ensuite exécuté find avec le -mmin +1440 et a obtenu le résultat suivant :

[[email protected] findtest]# find -mmin +1440
./foo3
./foo2

Selon la page de manuel de find, je comprends qu'il s'agit d'un comportement attendu :

 -mtime n
        File’s  data was last modified n*24 hours ago.  See the comments
        for -atime to understand how rounding affects the interpretation
        of file modification times.


-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.

Cela n'a toujours pas de sens pour moi. Donc, si un fichier a 1 jour, 23 heures, 59 minutes et 59 secondes, find -mtime +1 ignore tout cela et le traite comme s'il avait 1 jour, 0 heure, 0 minute et 0 seconde ? Dans ce cas, il n'est techniquement pas plus ancien qu'un jour et ignoré ?

Ne… ne… calcule pas.

Réponse acceptée :

Eh bien, la réponse simple est, je suppose, que votre implémentation de recherche suit la norme POSIX/SuS, qui dit qu'elle doit se comporter de cette façon. Citant SUSv4/IEEE Std 1003.1, édition 2013, "find":

-mtime n
     Le primaire doit être évalué comme vrai si l'heure de modification du fichier soustraite
     de l'heure d'initialisation, divisée par 86 400 (tout reste étant ignoré), est n.

(Ailleurs dans ce document, il est expliqué que n peut en fait être +n , et la signification de cela comme "supérieur à").

Quant à savoir pourquoi la norme dit qu'il doit se comporter de cette façon - eh bien, je suppose qu'il y a longtemps qu'un programmeur était paresseux ou n'y pensait pas, et écrivait simplement le code C (current_time - file_time) / 86400 . L'arithmétique des nombres entiers C ignore le reste. Les scripts ont commencé en fonction de ce comportement, et il a donc été standardisé.

En relation:adopter -Trouver un sens- Recherche dans le dictionnaire !

Le comportement spécifié serait également portable vers un système hypothétique qui ne stocke qu'une date de modification (pas l'heure). Je ne sais pas si un tel système a existé.


Linux
  1. Comment supprimer tous les fichiers antérieurs à X nombre de jours sous Linux ?

  2. Pourquoi `find . -type F` Prend plus de temps que `find .`?

  3. trouver les fichiers dont le numéro dans le nom de fichier est supérieur à

  4. Script bash pour supprimer les fichiers de plus de x jours avec des sous-répertoires

  5. Pourquoi ne puis-je pas créer de fichiers de plus de 2 Go sous Linux ?

Comment supprimer des fichiers plus anciens que les jours spécifiés sous Linux

Trouver tous les fichiers de plus d'une minute

Trouver des répertoires contenant tous les fichiers antérieurs à X ?

Supprimer gracieusement les fichiers de plus de 30 jours

Pourquoi Linux utilise-t-il une partition swap plutôt qu'un fichier ?

Pourquoi find -mtime ne fonctionne-t-il pas comme prévu sur des fichiers avec des fuseaux horaires différents ?