GNU/Linux >> Tutoriels Linux >  >> Linux

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

Solution 1 :

Il est possible que le problème de fuseau horaire soit un faux-fuyant.

find . -mtime 7

devrait trouver des fichiers datant d'exactement sept jours (« sept » signifiant entre 7 000 et 7 999 jours, plus ou moins, et « anciens » signifiant « depuis la dernière modification »). Si vous voulez des fichiers datant de plus de sept jours, ce qui est le cas à en juger par la date de votre premier fichier (juin 2010), essayez

find . -mtime +7

Je suis d'accord avec vous sur le fait que le fuseau horaire apparent est étrange, mais je pense que c'est explicable. man stat est clair qu'un time_t est stocké, comme le dit Sean R ci-dessous. Quoi ls ce qu'il fait est de l'afficher en heure locale, et il a la gentillesse de tenir compte des conventions locales d'heure d'été lorsqu'il le fait.

Mon système est le même:les heures de fichier qui tombent en mars-octobre sont affichées avec un fuseau horaire +0100 tandis que celles qui tombent en octobre-mars sont affichées avec un fuseau horaire +0000, non pas parce que cela est stocké dans le système de fichiers, mais parce que le fichier de fuseau horaire indique à mon système qu'en juin, lorsque j'ai touché le fichier, je l'aurais fait à une heure que je pensais être 8h du matin, pas ce-serait-7h-si-c'était-l'hiver. ls a la gentillesse, lorsqu'il affiche des heures qui se trouvent en été, de les montrer telles qu'elles seraient apparues en été, c'est tout.

Si vous pouvez trouver des fuseaux horaires dans votre ls sorties qui ne sont ni estivales ni hivernales selon votre convention locale, alors je me trompe - mais je n'en trouve aucune sur mon système.

Solution 2 :

Avec find, -mtime fonctionne par périodes de 24 heures donc

-mtime 0 or -mtime -1 mean today
-mtime 3 would mean 3 days old
-mtime +1 means greater than one day old 
-mtime -7 means less than 7 days old

Solution 3 :

Pour expliquer un peu plus la partie fuseau horaire (la discussion "mtime" est gérée par d'autres commentaires)...

La date et l'heure sont stockées sur des fichiers en secondes depuis minuit le 1er janvier 1970, UTC. Cela signifie qu'il n'y a pas de fuseau horaire qui leur est associé. Les programmes utilisent alors le paramètre de fuseau horaire du système dans /etc/timezone , à moins qu'elle ne soit remplacée par la variable d'environnement "TZ", pour afficher cette heure dans le fuseau horaire local :

chats:/tmp$ touch foo
chats:/tmp$ ls -l foo
-rw-r--r-- 1 jafo jafo 0 Dec  1 06:14 foo
chats:/tmp$ TZ=GMT ls -l foo
-rw-r--r-- 1 jafo jafo 0 Dec  1 13:14 foo
chats:/tmp$

Notez que dans la dernière ligne, il affiche 13h14, et dans la sortie au-dessus, où j'utilise mon fuseau horaire par défaut de l'heure des montagnes américaines (GMT-0700), il affiche 6h14. La différence est le deuxième "ls" où j'ai défini la variable d'environnement TZ sur GMT.

Vous pouvez également utiliser "stat" pour examiner toutes les heures/dates associées aux fichiers.


Linux
  1. Pourquoi l'expression régulière fonctionne-t-elle dans X mais pas dans Y ?

  2. Pourquoi la substitution de processus Bash ne fonctionne-t-elle pas avec certaines commandes ?

  3. Linux - Pourquoi Setuid ne fonctionne-t-il pas ??

  4. Linux – Pourquoi la locale Es_mx fonctionne-t-elle mais pas Es ?

  5. La commande Rm dans le script Bash ne fonctionne pas avec la variable ?

Retrouver les fichiers perdus avec Scalpel

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

Mapper les métadonnées avec Avconv ne fonctionne pas ?

Pourquoi Tomcat fonctionne-t-il avec le port 8080 mais pas 80 ?

Pourquoi git échoue-t-il sur push/fetch avec trop de fichiers ouverts

Pourquoi Windows ne reconnaît-il pas les fichiers à l'intérieur des partitions Linux ?