Script de bash pour supprimer des fichiers en fonction d’une période

Bonjour,

Aujourd’hui, nous allons créer un petit script bash qui va supprimer les fichiers en fonction d’une période par exemple : supprimer tous les fichiers qui ont plus de 1 an.

Création de fichiers de test vieux :

Tout d’abord, nous allons créer des fichiers qui ont plus d’un an et moins d’un an grâce à la commande touch

touch -t [AAMMJJhhmm] fichier 

Par défaut, la date de création d’un fichier est l’instant où la commande touch est exécutée.
L’option -t permet de modifier la date de dernière modification du fichier à la date inscrite [AAMMJJhhmm]

Par exemple :

Shell

touch -t 1401010000 ~/test1 # fichier test1 créé pour le 1er janvier 2014
touch -t 1402010000 ~/test2 # fichier test2 créé pour le 1er février 2014
touch -t 1403010000 ~/test3 # fichier test3 créé pour le 1er mars 2014
touch -t 1504090000 ~/test4 # fichier test4 créé pour le 15 avril 2015

Création et test du script :

Maintenant, nous allons créer notre script qui va supprimer tous les fichiers antérieurs à 1 an par rapport au jour d’exécution :
Création du fichier qui va contenir notre script qui supp_fichier.sh :

Shell

touch supp_fichier.sh
vi supp_fichier.sh

Ajout du script :

Fichier supp_fichier.sh

#!/bin/bash
NBJOURS="+365"
PATHFILES="~"
REGEXNAME="test*"
cd /
find $PATHFILES -name $REGEXNAME -type f -mtime $NBJOURS -exec rm -f {} \;

Rendre le script exécutable :

Shell

chmod 700 supp_fichier.sh

Exécuter le script :

Shell

./supp_fichier.sh

Vérifier que tout a bien marché :

Shell

ls -al ~

Variante du script :

Attention, le script supprime l’ensemble des fichiers sans aucune demande de confirmation, si vous souhaitez que le script vous demande une confirmation, il faudra plutôt mettre :

Fichier supp_fichier.sh

#!/bin/bash
NBJOURS="+365"
PATHFILES="~"
REGEXNAME="test*"
cd /
find $PATHFILES -name $REGEXNAME -type f -mtime $NBJOURS -ok rm -f {} \;

Variante du script avec arguments :

Utilisation de trois arguments, NBJOURS, PATHFILES, REGEXNAME, lors de l’appel du script :

Fichier supp_fichier.sh

#!/bin/bash
NBJOURS=$1
PATHFILES=$2
REGEXNAME=$3
cd /
find $PATHFILES -name $REGEXNAME -mtime $NBJOURS -exec rm -f {} \;

Exemple supprimer tous les fichiers tar.gz situé dans le dossier /tmp de plus de 3 mois :

Shell

./supp_fichier.sh "+90" "/tmp" "*.tar.gz"