Purge shell

#!/bin/ksh
# Script de purge unix
# fichier de param nécessaire à passer en paramètre de ce script
# 1 ligne = une conf de purge (champs séparés par des ;)
# REP(chemin du répertoire);FIC_PATTERN(fichier(s) à supprimer, peut contenir des étoiles);RETENTION(en jour);VERSION(nombre de version gardée à minima - peut être 0)

FIC_PARAM=$1
export CR=0

# on peut mettre DEBUG à "true" pour ne pas réellement purger et passer le script en simulation
export DEBUG="true"

if ! test -s "$FIC_PARAM";then
    echo "[ERROR] Le fichier de param n'existe pas ou est vide"
fi

# on boucle sur le fichier param
while read ligne ; do

    # on saute les lignes vides ou commentées
    echo "$ligne" | egrep "^$" > /dev/null && continue
    echo "$ligne" | egrep "^#" > /dev/null && continue

    # on parse la ligne de conf
    REP=$(echo "$ligne" | cut -d";" -f1)
    FIC_PATTERN=$(echo "$ligne" | cut -d";" -f2)
    RETENTION=$(echo "$ligne" | cut -d";" -f3)
    export VERSION=$(echo "$ligne" | cut -d";" -f4)

    # on affiche la conf
    echo "[INFO] Purge de REP=$REP FIC=$FIC_PATTERN RETENTION=$RETENTION VERSION=$VERSION"

    # on vérifie que REP est un répertoire
    if test ! -d "$REP" -o -z "$REP"; then
        echo "[ERROR] $REP n'est pas un répertoire"
        CR=`$CR + 1`
        continue
    fi


    # on purge
    # on peut tomber sur une erreur si la liste de fichier à supprimer est trop grande à cause du ls
    # dans ce cas, supprimer ceci de la commande find : -exec ls -1td "{}" +
    # mais vous n'aurez plus l'assurance d'avoir garder les n $VERSION les plus vieilles
    export i=0
    find $REP -name "$FIC_PATTERN" -mtime "+$RETENTION" -exec ls -1td "{}" + | while read findLine; do
        i=`expr $i + 1`
        # on garde n version de fichiers
        test $i -le $VERSION && continue

        # on liste ou on purge selon DEBUG
        if test "$DEBUG" == "true";then
            ls -ld $findLine
        else
            rm -Rf $findLine || CR=`$CR + 1`
        fi
    done


done < "$FIC_PARAM"

test $CR -ne 0 && echo "[ERROR] Au moins une erreur dans le script de purge"

exit $CR
(voir plus) Purge shell