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