web-dev-qa-db-fra.com

Expliquer la commande 'find -mtime'

J'essaie de supprimer tous les journaux datés, sauf le plus récent. Avant d'exécuter un script pour supprimer les fichiers, je souhaite bien sûr tester mes commandes pour m'assurer que les résultats sont exacts.

Lors de l'exécution de ces commandes, la date est la suivante:

Sep  1 00:53:44 AST 2014

Liste du répertoire:

Aug 27 23:59 testfile.2014-08-27.log
Aug 28 23:59 testfile.2014-08-28.log
Aug 29 23:59 testfile.2014-08-29.log
Aug 30 23:59 testfile.2014-08-30.log
Aug 31 23:59 testfile.2014-08-31.log
Sep  1 00:29 testfile.log

Je pensais que -mtime +1 était supposé lister tous les fichiers de plus d'un jour. Pourquoi le 8-30.log one n'est-il pas répertorié?

find . -type f -mtime +1 -name "testfile*log"
./testfile.2014-08-27.log
./testfile.2014-08-28.log
./testfile.2014-08-29.log

C’est l’effet recherché, mais c’est juste des essais et des erreurs. Qu'est-ce que ce 0 dit?

find . -type f -mtime +0 -name "testfile*log"
./testfile.2014-08-30.log
./testfile.2014-08-27.log
./testfile.2014-08-28.log
./testfile.2014-08-29.log
19
user3299633

La spécification POSIX pour find dit:

-mtimen Le primaire doit être évalué comme étant vrai si le temps de modification du fichier soustrait du temps d'initialisation, divisé par 86400 (sans tenir compte du reste), est n.

Fait intéressant, la description de find ne spécifie pas plus avant le «temps d'initialisation». C'est probablement, cependant, le moment où find est initialisé (exécuté).

Dans les descriptions, chaque fois que n est utilisé en tant qu'argument principal, il doit être interprété comme un entier décimal précédé éventuellement d'un signe plus ("+") ou moins ("-"), comme suit:

+n Plus que n.
n Exactement n.
-n Moins que n

A l'heure indiquée (2014-09-01 00:53:44 - 4: 00, je déduis que AST est l'heure normale de l'Atlantique et que, par conséquent, le décalage de fuseau horaire par rapport à l'heure UTC est de -4: 00 dans ISO 8601 mais +4: 00 dans l'ISO 9945 (POSIX), mais cela n'a pas beaucoup d'importance):

1409547224 = 2014-09-01 00:53:44 -04:00
1409457540 = 2014-08-30 23:59:00 -04:00

alors:

1409547224 - 1409457540 = 89684
89684 / 86400 = 1

Même si les valeurs "secondes depuis l'époque" sont incorrectes, les valeurs relatives sont correctes (pour un fuseau horaire quelconque quelque part dans le monde, elles sont correctes).

La valeur n calculée pour le fichier journal 2014-08-30 est donc exactement 1 (le calcul est effectué avec une arithmétique entière) et le +1 la rejette car il s'agit strictement d'une comparaison > 1 (et non >= 1).

33
Jonathan Leffler

+1 signifie il y a 2 jours. C'est arrondi.

5
txt

Vous pouvez utiliser la commande find avec mtime.

Par exemple:

 find /path of the folder -type f -mtime +30

-type fait référence au type de fichier.

+30 fait référence à la date antérieure à la date actuelle.

Pour plus d'options, nous pouvons consulter la page de manuel .

0
Javeed Shakeel