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"