Efacer contenu d'un dossier par date

Fermé
Plopy - 26 sept. 2010 à 19:43
 Plopy - 28 sept. 2010 à 00:02
Bonjour,

je souhaiterais créer un script pour effacer le contenu d'un dossier précis, mais pas tout son contenu, seulement celui dont la date est inférieure à 5 jours (J-5).

Par exemple, j'ai mon dossier /home/user/repertoire/backups/ avec plein de dossiers (1 dossiers est crée par backup) et à l'interieur de ces dossiers il a plain de fichiers.

Ce que je veux c'est pouvoir effacer les dossiers dans /home/user/repertoire/backups/ (avec tout leur contenu) dont la date de création est J-5.

Voila si vous pouvez m'aider.
Merci d'avance.
A voir également:

5 réponses

jivef Messages postés 927 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 12 novembre 2020 306
Modifié par jivef le 27/09/2010 à 21:16
Bonjour,
En fait, il y a un conseil que je voudrais te donner pour que tes dossiers soient toujours classés dans un ordre chronologique lorsque tu les listes :
Remplace
NOW="$(date +"%d-%m-%Y_%Hh%M")"
par
NOW="$(date +"%Y-%m-%d_%Hh%M")"

Pour la suite, voici un script qui fait exactement ce que tu veux et que j'ai mis en place il y a quelques mois :

Je créé des sauvegardes sur un disque USB, leur nom commence par savYYYYMMJJ
Je ne garde que 30 jours de sauvegarde, donc je fais ceci :

#suppression des sauvegardes de plus de 30 jours.
find /media/usbdsk -ctime +30 -type d -name sav* -exec rm -r {} \;
ls -R /media/usbdsk/$vardate > /usr/scripts/sauvegarde.log

Donc pour supprimer les fichiers de sauvegardes de plus de 5 jours, tu transforme le 30 en 5.

Si tu veux, pour la forme, je te mets le script intégral en dessous :
Certains choix peuvent te paraître bizarres, mais je suis le seul à travailler sur systèmes Unix ou GNU/Linux dans ma société et si je veux que mes collègues soient capables faire une restauration sans m'appeler, il faut faire simple.


#!/bin/bash
# Script de sauvegarde du dossier /home
#echo definition de la variable de date servant creer les repertoires de sauvegarde
vardate=sav'date +%Y%m%d%H%M'
echo $vardate
sleep 2
# montage du disque
mount /dev/sdb1 /media/usbdsk -o rw
case $? in
0) echo "le montage a fonctionne."
;;
*) echo "erreur de montage du volume de sauvegarde, peut-etre etait-il deja monte..."
;;
esac
# verification du montage du disque :
mount | grep "/dev/sdb1 on /media/usbdsk type vfat (rw)"
case $? in
0) echo "le disque est present"
;;
*) mutt -s "Sauvegarde SAT - GNU/Linux - disque non monte " sauvegarde@mondomaine.pf < /usr/scripts/mounterreur.txt
sleep 5
exit 0
;;
esac
mkdir -p /media/usbdsk/$vardate
echo $?
echo ci-dessus resultat mkdir
sleep 2
# Ci dessous ligne permettant de creer un dossier identique a celui d'origine avec cpio
find /home/* | cpio -pmd /media/usbdsk/$vardate
sleep 2
echo suppression des sauvegardes de plus de 30 jours.
find /media/usbdsk -ctime +30 -type d -name sav* -exec rm -r {} \;
ls -R /media/usbdsk/$vardate > /usr/scripts/sauvegarde.log
mutt -s "Sauvegarde SAT - GNU/Linux" sauvegarde@mondomaine.pf < /usr/scripts/sauvegarde.log
umount /media/usbdsk
sleep 10
/sbin/shutdown -h +45 "Attention arret du serveur dans 45 secondes. - Seul root peut annuler avec shutdown -c "


Ne t'étonne pas si j'arrête le serveur après la sauvegarde, c'est simplement parce qu'à Tahiti, il y a certains endroit où les coupures de courant sont très fréquentes, de plus ici, l'électricité est principalement d'origine thermique, donc polluante.




Une idée reçue est souvent une idée morte.
1
jeanbi Messages postés 15118 Date d'inscription samedi 9 décembre 2006 Statut Contributeur Dernière intervention 6 février 2023 2 181
Modifié par jeanbi le 26/09/2010 à 19:57
bonjour,


Exemple: 
Rechercher (find) à partir du répertoire courant (.) sans inclure les sous-répertoires (-maxdepth 1) tous les fichiers classiques (-type f) de l'utilisateur vandit (-user vandit) "créé" (dernière modification du statut) il y'a plus de 30*24h (Lorsque find calcule le nombre de période de 24 heures la partie fractionnelle est ignorée. Ainsi, pour correspondre à -ctime +1, un fichier doit avoir au moins deux jours)(-ctime +29) et supprimer les fichiers trouvés (-exec rm {} \;) 

$ find . -maxdepth 1 -type f -user vandit -ctime +29 -exec rm {} \; 



peut etre ça ...
a+
ps : en attendant le passage des pro du script je ne nommerai personne :-)
FC 13 - Mandriva 2010 -Debian squeeze-
Les meilleures choses ont besoin de patience.(JC ANGLADE)
penser aux astuces
0
Alors je vais essayer d'aller droit au but ce sera plus simple ;=)

J'ai le script suivant:

#!/bin/bash

Mysql_User="user"
Mysql_Paswd="passwd"
Mysql_host="localhost"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
GZIP="$(which gzip)"

DEST="/home/user/backups/backup_sql/"

NOW="$(date +"%d-%m-%Y_%Hh%M")"

DEST_mysql="$DEST/$NOW"

IGGY=""

FILE=""
DBS=""

echo "Début de la sauvegarde et compression du serveur MySQL $Mysql_User vers $DEST"
date
echo

# On crée le répertoire défini précédemment
[ ! -d $DEST_mysql ] && mkdir -p $DEST_mysql || :

# On limite l'accés au root uniquemment si nécessaire (dé-commenter les deux lignes)
#$CHOWN 0.0 -R $DEST_mysql
#$CHMOD 0600 $DEST_mysql

# On liste les bases de données associés au compte défini en début de script
DBS="$($MYSQL -u $Mysql_User -h $Mysql_host -p$Mysql_Paswd -Bse 'show databases')"

for db in $DBS
do
    skipdb=-1
    if [ "$IGGY" != "" ];
    then
        for i in $IGGY
        do
            [ "$db" == "$i" ] && skipdb=1 || :
        done
    fi

    if [ "$skipdb" == "-1" ] ; then
        FILE="$DEST_mysql/$db.$NOW.gz"
        # On boucle, on dump toutes les bases de données et on les compresse individuellement avant sauvegarde sur le FTP
        $MYSQLDUMP -u $Mysql_User -h $Mysql_host -p$Mysql_Paswd $db | $GZIP -9 > $FILE
    fi
done

# Enregistrement de l'heure de finalisation du processus
echo "Sauvegarde MySQL du compte $Mysql_User terminée !"
date
echo

# Listing des fichiers et vérification des tailles
ls -lh $DEST


Donc comme vous le voyez le fonctionnement est simple; il se connecte au serveur MySQL pour sauvegarder les bases une à une en TGZ sur un dossier avec pour nom la date et heure. Donc a chaque fois que le crontab est exécuté, un nouveau dossier est crée à l'intérieur de $DEST.

Ce que je veux c'est que, AVANT l'exécution de la sauvegarde (l'echo dans le script) il scanne le dossier DEST à la recherche de dossiers en J-5 et les efface tous. Ce qui me permet de toujours avoir une copie de sauvegarde de mon SQL en J-5.

Voila, et si le script en état peut vous servir tant mieux ;)
0
Si jeanbi ou un autre pouvait me confirmer l'adaptation du code a mon script ce serait sympa.

Merci à vous.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je te remerci pour ton code, je vais essayer de l'adapter à mes besoins. ;)
0