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, que se passe-t-il si j’ai besoin d’une résolution plus fine d’un jour, par exemple de 6 heures? Existe-t-il un moyen propre de le faire, comme il y a l’utilisation de find et -mtime?
Est-ce que votre find
a 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 envisager d’utiliser tmpwatch
pour faire le même travail. phjr a également recommandé tmpreaper
dans les commentaires.
Vous pourriez pour cette astuce: créer un fichier il y a 1 heure et utiliser l’argument de -newer file
.
(Ou utilisez touch -t
pour créer un tel fichier).
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 l’approche qui a fonctionné pour moi (et je ne le vois pas être utilisé 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.
-mmin est pour les minutes.
Essayez de regarder la page de manuel.
man find
pour plus de types.
Si vous n’avez pas “-mmin” dans votre version de “find”, alors “-mtime -0.041667” devient assez proche de “dans la dernière heure”, donc dans votre cas, utilisez:
-mtime +(X * 0.041667)
Donc, si X signifie 6 heures, alors:
find . -mtime +0.25 -ls
fonctionne parce que 24 heures * 0,25 = 6 heures
Voici ce que l’on peut faire pour continuer comme s’était demandé @iconoclast dans son commentaire sur une autre réponse.
utilisez crontab pour l’utilisateur ou un fichier /tmp/hour
/etc/crontab
pour créer le fichier /tmp/hour
:
# mh dom mon dow user command 0 * * * * root /usr/bin/touch /tmp/hour > /dev/null 2>&1
puis utilisez ceci pour exécuter votre commande:
find /tmp/ -daystart -maxdepth 1 -not -newer /tmp/hour -type f -name "for_one_hour_files*" -exec do_something {} \;
find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;