web-dev-qa-db-fra.com

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, 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?

180
Tom Feiner

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.

281
Paul Dixon

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).

9
xtofl

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.

2
Axel Ronsin

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.
1
Rajeev Rumale

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

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

0
Malcolm Boekhoff

find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;

0
Eragonz91

-mmin est pour les minutes.

Essayez de regarder la page de manuel.

man find

pour plus de types.

0
GavinCattell