web-dev-qa-db-fra.com

Cron job pour supprimer les fichiers de plus de 3 jours

J'ai besoin de supprimer des fichiers de plus de 3 jours avec un travail cron dans 3 répertoires différents. (ces 3 répertoires sont les enfants d'un répertoire parent /a/b/c/1 & /a/b/c/2 & /a/b/c/3) Peut-on le faire avec une seule ligne dans la crontab?

21
KingKongFrog

C'est assez simple (bien que cela passe par un temps de modification il y a plus de 3 jours car un temps de création n'est disponible que sur certains systèmes de fichiers avec des outils spéciaux):

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-delete

Supprimez le # Avant le -delete Une fois que vous êtes sûr qu'il trouve les fichiers que vous souhaitez supprimer.

Pour le faire exécuter par cron, je créerais probablement un script exécutable (ajoutez un Shebang - #!bin/sh À la ligne supérieure du fichier et le rendre exécutable avec chmod a+x), Puis le mettre dans un répertoire cron approprié comme /etc/cron.daily ou /etc/cron.weekly. A condition bien sûr que vous n'ayez pas besoin d'un planning plus précis et que ces répertoires existent sur votre distribution.

Mise à jour

Comme indiqué ci-dessous, l'option -delete Pour find n'est pas très portable. Une approche compatible POSIX serait:

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-exec rm {} +

Supprimez à nouveau le # Lorsque vous êtes sûr d'avoir les bons fichiers.

Update2

Pour citer commentaire de Stéphane Chazelas ci-dessous:

Notez que -exec rm {} + A des vulnérabilités de conditions de concurrence que -delete (Le cas échéant) n'a pas. Ne l'utilisez donc pas sur des répertoires accessibles en écriture par d'autres. Certaines trouvailles ont également un -execdir Qui atténue ces vulnérabilités.

26
Graeme

Vous feriez mieux d’utiliser tmpwatch

tmpwatch recursively removes files which haven't been accessed for a given time. Normally, it's used to clean up directories which are used for temporary holding space such as /tmp.
9
Barry Chapman