Script effacer plusieurs fichiers, sauf les n derniers

Voir aussi logrotate

script

#! /bin/bash set -o nounset # Parametres CHEMIN=~/backup/ # ADD 1; If KEEP_LAST=5 => Only 4 will be kept KEEP_LAST=10 purge() { local FICHIER=$1 NEWER_THAN=$(ls -1t $CHEMIN/$FICHIER |sed -ne "${KEEP_LAST}p") if [[ ! -z "$NEWER_THAN" ]] then find $CHEMIN -depth -maxdepth 1 -type f -not -newer $(ls -1t $CHEMIN/$FICHIER |sed -ne "${KEEP_LAST}p") -name "$FICHIER" -delete fi } purge 'information_schema-*.sql.gz' purge 'mysql-*.sql.gz' purge 'performance_schema-*.sql.gz' purge 'zabbix-*.sql.gz'

Notes sur "-delete" de find

-delete Effacer les fichiers, et renvoyer vrai si l'effacement a réussi. Sil'effacement échoue, un message d'erreur est envoyé. Si -delete échoue,le statut de sortie de find sera différent de zéro (si jamais ils'interrompt). L'utilisation de l'action -delete active automatiquementl'option -depth.

Attention : N'oubliez pas que la ligne de commande de find est évaluée comme une expression. Écrire -delete en premier forcera find à essayerd'effacer tout ce qui se trouve dans les points de départ que vous avezindiqué. Lorsque vous testez une ligne de commande de find qui utilisera -delete, vous devriez préciser l'option -depth afin d'éviter les sur‐prises plus tard. Puisque -delete entraîne -depth, vous ne pouvez pas utiliser en même temps -prune et -delete.

Source : man find