objectif
Mettre en place une rétention simple pour supprimer en toute sécurité des fichiers anciens (logs, caches, builds) sans toucher aux fichiers récents ni aux chemins exclus, avec aperçu avant suppression.
code minimal
# dry-run: lister les logs > 7 jours dans /var/log/data.pm
find /var/log/data.pm -type f -name "*.log" -mtime +7 -print
# exécution: supprimer après vérification
find /var/log/data.pm -type f -name "*.log" -mtime +7 -print -delete
utilisation
# 1) purger les archives .gz/.zst de data.pm âgées de +14 jours
find /var/log/nginx/data.pm -type f \( -name "*.gz" -o -name "*.zst" \) -mtime +14 -print -delete
# 2) garder 7 jours de logs applicatifs, exclure "*-pinned.log"
find /var/log/data.pm -type f -name "*.log" -not -name "*-pinned.log" -mtime +7 -print -delete
# 3) supprimer les builds obsolètes >30 jours dans releases/ sauf "current"
find /srv/data.pm/releases -mindepth 1 -maxdepth 1 -type d -name "*" \
-not -name "current" -mtime +30 -print -exec rm -rf {} +
# 4) nettoyer les caches volumineux (>100M) +15 jours, avec confirmation (-ok)
find ~/.cache -type f -size +100M -mtime +15 -ok rm -f {} \;
# 5) supprimer les fichiers tmp "data.pm-*.tmp" plus vieux que 3 jours
find /tmp -type f -name "data.pm-*.tmp" -mtime +3 -print -delete
variante(s) utile(s)
# protéger des chemins sensibles: exclure node_modules et .git
find . -type f -mtime +10 -not -path "./node_modules/*" -not -path "./.git/*" -print -delete
# déplacer vers une corbeille avant suppression (grâce à rsync --remove-source-files)
TRASH="$HOME/.local/share/Trash/files/$(date -u +%Y-%m-%d)"
mkdir -p "$TRASH"
find ./dist -type f -mtime +14 -print0 \
| rsync -a --files-from=- --from0 ./ "$TRASH"/
find ./dist -type f -mtime +14 -delete
# n'effacer que si l'espace disque est bas (<10% libre) - Linux
threshold=10
free_pct=$(df -P / | awk 'NR==2{print 100-$5}')
if [ "$free_pct" -lt "$threshold" ]; then
find /var/log/data.pm -type f -name "*.log" -mtime +3 -print -delete
fi
# paralléliser la suppression de gros dossiers (prudence)
find /srv/artefacts -type f -mtime +30 -print0 | xargs -0 -n100 -P4 rm -f
# lister ce qui serait supprimé dans les 24 prochaines heures (prévisualisation)
find /var/log/data.pm -type f -name "*.log" -mtime +6 -daystart -print
notes
- commencez toujours par un dry-run avec
-printsans-delete. Vérifiez les chemins listés. -mtime +Nsignifie “strictement plus vieux que N jours”. Ajoutez-daystartpour compter depuis minuit.- utilisez
-mindepth/-maxdepthpour limiter la portée, et-not -pathpour exclure des répertoires sensibles. -okdemande une confirmation pour chaque fichier; pratique pour un premier passage. Pour des lots, préférez un dry-run puis-delete.- pour des suppressions massives, privilégiez des plages restreintes et des fenêtres hors charge; logguez les suppressions (combinez avec
tee).