Comment supprimer des fichiers de plus de X heures

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 {} \;