J'écris un script bash qui doit supprimer les anciens fichiers.
Il est actuellement implémenté en utilisant:
find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete
Cela supprimera les fichiers de plus d'un jour.
Cependant, si j'ai besoin d'une résolution plus fine qu'un jour, disons 6 ans? Existe-t-il une manière propre et agréable de le faire, comme si vous utilisiez find et -mtime?
Votre find
a-t-il l'option -mmin
? Cela peut vous permettre de tester le nombre de minutes depuis la dernière modification:
find $LOCATION -name $REQUIRED_FILES -type f -mmin +360 -delete
Ou peut-être envisagez-vous d’utiliser tmpwatch
pour effectuer le même travail. phjr a également recommandé tmpreaper
dans les commentaires.
Vous pouvez faire cette astuce: créer un fichier il y a 1 heure et utiliser l'argument -newer file
.
(Ou utilisez touch -t
pour créer un tel fichier).
Voici l'approche qui a fonctionné pour moi (et je ne la vois pas utilisée ci-dessus)
$ find /path/to/the/folder -name *.* -mmin +59 -delete > /dev/null
supprimer tous les fichiers de plus de 59 minutes tout en laissant les dossiers intacts.
Pour SunOS 5.10
Example 6 Selecting a File Using 24-hour Mode
The descriptions of -atime, -ctime, and -mtime use the ter-
minology n ``24-hour periods''. For example, a file accessed
at 23:59 is selected by:
example% find . -atime -1 -print
at 00:01 the next day (less than 24 hours later, not more
than one day ago). The midnight boundary between days has no
effect on the 24-hour calculation.
Voici ce que l'on peut faire pour aller dans le même sens que @iconoclast se posait dans leur commentaire sur une autre réponse.
utilisez crontab for user ou un /etc/crontab
pour créer le fichier /tmp/hour
:
# m h dom mon dow user command
0 * * * * root /usr/bin/touch /tmp/hour > /dev/null 2>&1
puis utilisez ceci pour lancer votre commande:
find /tmp/ -daystart -maxdepth 1 -not -newer /tmp/hour -type f -name "for_one_hour_files*" -exec do_something {} \;
Si vous n'avez pas "-mmin" dans votre version de "trouver", alors "-mtime -0.041667" devient assez proche de "dans la dernière heure", alors dans votre cas, utilisez:
-mtime +(X * 0.041667)
alors, si X signifie 6 heures, alors:
find . -mtime +0.25 -ls
fonctionne parce que 24 heures * 0,25 = 6 heures
find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;
-mmin est pour les minutes.
Essayez de regarder la page de manuel.
man find
pour plus de types.