2017-10-02 5 views
0

J'écris un petit script bash à utiliser avec cron, pour sauvegarder la base de données. Lorsque je recherche d'anciennes sauvegardes (plus de 180 jours), la commande find les supprime.find commande avec -delete retourne toujours le code d'état 0

Il ne les supprime, mais aussi quand il le fait et quand il n'y a rien à supprimer, il retourne 0.

#!/bin/bash 

# Vars 
TODAY=$(date +%d%m%y) 
BDIR=/backup/ 
FLOG="/var/log/mydb_backup.log" 

# Backing up the db 
su -c "pg_dump --format=c --file=${BDIR}mydb_db_backup.${TODAY} mydb" postgres 
if [ $? -eq 0 ]; then 
    LOG="mydb DB of ${TODAY} backed up!" 
else 
    LOG="Problem to back up mydb DB of ${TODAY}" 
fi 


# Delete db backup older than 180+ days 
find ${BDIR} -type f -mtime +180 -delete 
if [ $? -eq 0 ]; then 
    LOG+=" - Old DB backup deleted" 
else 
    LOG+=" - No Old DB backup to delete" 
fi 

# Writing result 
echo ${LOG} >> ${FLOG} 

echo $? retour toujours 0, même si elle ne supprimait pas quoi que ce soit (qui devrait se produire le premier mois seulement). Y a-t-il quelque chose que je fais de mal?

+0

Copie inter-site: https://serverfault.com/questions/225798/can-i-make-find-return-non-0-who-no-matching-files-are-found –

+0

En raison de la suppression de la suppression Tout n'est pas une erreur. 'find' ne renvoie pas le nombre de fichiers supprimés, mais un code d'état décrivant toute erreur survenue pendant l'exécution. Comme il a couru sans erreurs, il a renvoyé 0 comme prévu – litelite

+0

Vrai .. J'ai totalement oublié qu'il ne s'agit pas de supprimer mais de trouver. Merci les gars! Je vais le réparer d'une manière ou d'une autre;) – Nihvel

Répondre

1

Bon .. c'est la meilleure solution que je peux penser au moment:

# Delete db backup older than 180+ days 
find ${BDIR} -maxdepth 1 -type f -mtime +180 -printf "%f\n" > $FDEL 
if [[ $? -eq 0 && $(wc -l <"$FDEL") -gt 0 ]]; then 
    cd $BDIR 
    xargs -d '\n' -a $FDEL rm 
    LOG+=" - Old DB backup deleted" 
else 
    LOG+=" - No Old DB backup to delete" 
fi 
rm $FDEL 

imprimer le résultat (s) dans un fichier, je propose dans le dossier de sauvegarde et supprimer chaque fichier trouvé dans la liste. Le fichier créé doit être plus grand que 0 Octets, cela signifie qu'il n'est pas vide et doit supprimer ce qu'il contient.