2010-02-19 14 views
0

J'ai une paire de scripts bash , 1 qui sauve mysql dbs, et la seconde pour purger les anciennes sauvegardes.Trier les résultats du sous-ensemble trouver et saisir (bash)

J'ai toujours compté sur la date, donc tous les fichiers de plus de 7 jours sont purgés et de nouvelles sauvegardes sont créées quotidiennement. Le résultat a été un ensemble de sauvegardes 7 jours en arrière.

Eh bien maintenant que j'ai 20+ dbs J'ai séparé ce travail quotidien en un travail quotidien et hebdomadaire. Si je continue à utiliser la méthode de recherche et de date, je perdrais la semaine dernière.

QUESTION

Comment puis-je régler la sortie d'une découverte par date, puis purger tous, mais les plus récentes 7. (même si le plus récent est de 2 mois, il reste)

C'est aussi loin que je l'ai eu, mais ce n'est pas comme prévu. Peut-être en utilisant ls pourrait être le meilleur choix 9find est un reste d'utiliser la date comme seul critère pour la purge)

OLDFILES=`find -regex .*sql.*` 

set -- $OLDFILES 

if [ -z $1 ] 
then 
    printf "\tNo files matching purge criteria\n" | tee -a $LOGFILE 
else 
    printf "\tSQL Files being Delete from $HERE\n" | tee -a $LOGFILE 
    printf "\t\t%s\n" $OLDFILES | tee -a $LOGFILE 
fi 
# $RETAIN is the # of recent to keep 
# so I want to grab a subset from 0 to (total - retain), and purge them 
TOBURN=$(($# - $RETAIN)) 
printf " grab first %s files. %s - %s" $TOBURN $# $RETAIN 
if [ $TOBURN -gt 0 ] 
then 
    TOPURGE=("[email protected]:0:$TOBURN") 
    printf "\n\nREMOVING..\n\t\t%s\n" $TOPURGE 
fi 

fichiers existants

  ./webbmaster_bellarose_joomla_01-09-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-25-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-10-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-04-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-25-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-29-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-30-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-28-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-06-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-13-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-24-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-21-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-24-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-27-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-26-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-17-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-03-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-21-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-20-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-16-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-31-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-11-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-05-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-14-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-22-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-12-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-17-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-18-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-20-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-08-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-22-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-27-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-23-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-07-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-26-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-19-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-29-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-15-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-28-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-01-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-18-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-02-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-23-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-19-2009.sql.gz 

cibles pour la purge (que je vouloir mettre en variable pour simple rm -f $ var)

  ./webbmaster_bellarose_joomla_01-09-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-25-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-10-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-04-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-30-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-28-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-06-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-13-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-21-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-24-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-27-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-17-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-03-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-21-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-20-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-16-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-31-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-11-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-05-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-14-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-22-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-12-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-17-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-18-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-20-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-08-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-22-2009.sql.gz 
      ./webbmaster_bellarose_joomla_12-23-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-07-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-26-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-19-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-29-2009.sql.gz 
      ./webbmaster_bellarose_joomla_01-15-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-01-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-18-2010.sql.gz 
      ./webbmaster_bellarose_joomla_01-02-2010.sql.gz 
      ./webbmaster_bellarose_joomla_12-19-2009.sql.gz 

(dates 01.23 à 01.29 sont laissés intacts)

Répondre

4

Veuillez faire une grande faveur à vous-même (et à tous les autres) et commencer à écrire des dates au format ISO-8601 (par exemple AAAA-MM-JJ).

E.g.au lieu de

./webbmaster_bellarose_joomla_12-29-2009.sql.gz 

vous auriez

./webbmaster_bellarose_joomla_2009-12-29.sql.gz 

Cela a many benefits, le plus important ici que l'ordre chronologique et alphabétique devient identique. Pas besoin de trouver, juste la liste des fichiers, l'ordre inverse, supprimez les 7 premières lignes et supprimer tous les fichiers restants:

ls *sql* | tac | sed 1,7d | tr '\012' '\000' | xargs -0 --no-run-if-empty rm 

Mise à jour: Que voulez-vous dire par « aller de l'avant »? Comme fas que je peux dire que ma solution résout votre problème 100%:

/tmp/so>cat existing_files 
./webbmaster_bellarose_joomla-2009-12-17.sql.gz 
./webbmaster_bellarose_joomla-2009-12-18.sql.gz 
./webbmaster_bellarose_joomla-2009-12-19.sql.gz 
./webbmaster_bellarose_joomla-2009-12-20.sql.gz 
./webbmaster_bellarose_joomla-2009-12-21.sql.gz 
./webbmaster_bellarose_joomla-2009-12-22.sql.gz 
./webbmaster_bellarose_joomla-2009-12-23.sql.gz 
./webbmaster_bellarose_joomla-2009-12-24.sql.gz 
./webbmaster_bellarose_joomla-2009-12-25.sql.gz 
./webbmaster_bellarose_joomla-2009-12-26.sql.gz 
./webbmaster_bellarose_joomla-2009-12-27.sql.gz 
./webbmaster_bellarose_joomla-2009-12-28.sql.gz 
./webbmaster_bellarose_joomla-2009-12-29.sql.gz 
./webbmaster_bellarose_joomla-2009-12-30.sql.gz 
./webbmaster_bellarose_joomla-2009-12-31.sql.gz 
./webbmaster_bellarose_joomla-2010-01-01.sql.gz 
./webbmaster_bellarose_joomla-2010-01-02.sql.gz 
./webbmaster_bellarose_joomla-2010-01-03.sql.gz 
./webbmaster_bellarose_joomla-2010-01-04.sql.gz 
./webbmaster_bellarose_joomla-2010-01-05.sql.gz 
./webbmaster_bellarose_joomla-2010-01-06.sql.gz 
./webbmaster_bellarose_joomla-2010-01-07.sql.gz 
./webbmaster_bellarose_joomla-2010-01-08.sql.gz 
./webbmaster_bellarose_joomla-2010-01-09.sql.gz 
./webbmaster_bellarose_joomla-2010-01-10.sql.gz 
./webbmaster_bellarose_joomla-2010-01-11.sql.gz 
./webbmaster_bellarose_joomla-2010-01-12.sql.gz 
./webbmaster_bellarose_joomla-2010-01-13.sql.gz 
./webbmaster_bellarose_joomla-2010-01-14.sql.gz 
./webbmaster_bellarose_joomla-2010-01-15.sql.gz 
./webbmaster_bellarose_joomla-2010-01-16.sql.gz 
./webbmaster_bellarose_joomla-2010-01-17.sql.gz 
./webbmaster_bellarose_joomla-2010-01-18.sql.gz 
./webbmaster_bellarose_joomla-2010-01-19.sql.gz 
./webbmaster_bellarose_joomla-2010-01-20.sql.gz 
./webbmaster_bellarose_joomla-2010-01-21.sql.gz 
./webbmaster_bellarose_joomla-2010-01-22.sql.gz 
./webbmaster_bellarose_joomla-2010-01-23.sql.gz 
./webbmaster_bellarose_joomla-2010-01-24.sql.gz 
./webbmaster_bellarose_joomla-2010-01-25.sql.gz 
./webbmaster_bellarose_joomla-2010-01-26.sql.gz 
./webbmaster_bellarose_joomla-2010-01-27.sql.gz 
./webbmaster_bellarose_joomla-2010-01-28.sql.gz 
./webbmaster_bellarose_joomla-2010-01-29.sql.gz 
/tmp/so>cat targets_for_purging 
./webbmaster_bellarose_joomla-2009-12-17.sql.gz 
./webbmaster_bellarose_joomla-2009-12-18.sql.gz 
./webbmaster_bellarose_joomla-2009-12-19.sql.gz 
./webbmaster_bellarose_joomla-2009-12-20.sql.gz 
./webbmaster_bellarose_joomla-2009-12-21.sql.gz 
./webbmaster_bellarose_joomla-2009-12-22.sql.gz 
./webbmaster_bellarose_joomla-2009-12-23.sql.gz 
./webbmaster_bellarose_joomla-2009-12-24.sql.gz 
./webbmaster_bellarose_joomla-2009-12-25.sql.gz 
./webbmaster_bellarose_joomla-2009-12-26.sql.gz 
./webbmaster_bellarose_joomla-2009-12-27.sql.gz 
./webbmaster_bellarose_joomla-2009-12-28.sql.gz 
./webbmaster_bellarose_joomla-2009-12-29.sql.gz 
./webbmaster_bellarose_joomla-2009-12-30.sql.gz 
./webbmaster_bellarose_joomla-2009-12-31.sql.gz 
./webbmaster_bellarose_joomla-2010-01-01.sql.gz 
./webbmaster_bellarose_joomla-2010-01-02.sql.gz 
./webbmaster_bellarose_joomla-2010-01-03.sql.gz 
./webbmaster_bellarose_joomla-2010-01-04.sql.gz 
./webbmaster_bellarose_joomla-2010-01-05.sql.gz 
./webbmaster_bellarose_joomla-2010-01-06.sql.gz 
./webbmaster_bellarose_joomla-2010-01-07.sql.gz 
./webbmaster_bellarose_joomla-2010-01-08.sql.gz 
./webbmaster_bellarose_joomla-2010-01-09.sql.gz 
./webbmaster_bellarose_joomla-2010-01-10.sql.gz 
./webbmaster_bellarose_joomla-2010-01-11.sql.gz 
./webbmaster_bellarose_joomla-2010-01-12.sql.gz 
./webbmaster_bellarose_joomla-2010-01-13.sql.gz 
./webbmaster_bellarose_joomla-2010-01-14.sql.gz 
./webbmaster_bellarose_joomla-2010-01-15.sql.gz 
./webbmaster_bellarose_joomla-2010-01-16.sql.gz 
./webbmaster_bellarose_joomla-2010-01-17.sql.gz 
./webbmaster_bellarose_joomla-2010-01-18.sql.gz 
./webbmaster_bellarose_joomla-2010-01-19.sql.gz 
./webbmaster_bellarose_joomla-2010-01-20.sql.gz 
./webbmaster_bellarose_joomla-2010-01-21.sql.gz 
./webbmaster_bellarose_joomla-2010-01-22.sql.gz 
/tmp/so>sed 's/\(.\{29\}\)_\(..-..\)-\(....\)/\1-\3-\2/' existing_files | sort > existing_files.8601 
/tmp/so>sed 's/\(.\{29\}\)_\(..-..\)-\(....\)/\1-\3-\2/' targets_for_purging | sort > targets_for_purging.8601 
/tmp/so>mkdir files 
/tmp/so>cd files 
/tmp/so/files>xargs touch < ../existing_files.8601 
/tmp/so/files>ls -1 
webbmaster_bellarose_joomla-2009-12-17.sql.gz 
webbmaster_bellarose_joomla-2009-12-18.sql.gz 
webbmaster_bellarose_joomla-2009-12-19.sql.gz 
webbmaster_bellarose_joomla-2009-12-20.sql.gz 
webbmaster_bellarose_joomla-2009-12-21.sql.gz 
webbmaster_bellarose_joomla-2009-12-22.sql.gz 
webbmaster_bellarose_joomla-2009-12-23.sql.gz 
webbmaster_bellarose_joomla-2009-12-24.sql.gz 
webbmaster_bellarose_joomla-2009-12-25.sql.gz 
webbmaster_bellarose_joomla-2009-12-26.sql.gz 
webbmaster_bellarose_joomla-2009-12-27.sql.gz 
webbmaster_bellarose_joomla-2009-12-28.sql.gz 
webbmaster_bellarose_joomla-2009-12-29.sql.gz 
webbmaster_bellarose_joomla-2009-12-30.sql.gz 
webbmaster_bellarose_joomla-2009-12-31.sql.gz 
webbmaster_bellarose_joomla-2010-01-01.sql.gz 
webbmaster_bellarose_joomla-2010-01-02.sql.gz 
webbmaster_bellarose_joomla-2010-01-03.sql.gz 
webbmaster_bellarose_joomla-2010-01-04.sql.gz 
webbmaster_bellarose_joomla-2010-01-05.sql.gz 
webbmaster_bellarose_joomla-2010-01-06.sql.gz 
webbmaster_bellarose_joomla-2010-01-07.sql.gz 
webbmaster_bellarose_joomla-2010-01-08.sql.gz 
webbmaster_bellarose_joomla-2010-01-09.sql.gz 
webbmaster_bellarose_joomla-2010-01-10.sql.gz 
webbmaster_bellarose_joomla-2010-01-11.sql.gz 
webbmaster_bellarose_joomla-2010-01-12.sql.gz 
webbmaster_bellarose_joomla-2010-01-13.sql.gz 
webbmaster_bellarose_joomla-2010-01-14.sql.gz 
webbmaster_bellarose_joomla-2010-01-15.sql.gz 
webbmaster_bellarose_joomla-2010-01-16.sql.gz 
webbmaster_bellarose_joomla-2010-01-17.sql.gz 
webbmaster_bellarose_joomla-2010-01-18.sql.gz 
webbmaster_bellarose_joomla-2010-01-19.sql.gz 
webbmaster_bellarose_joomla-2010-01-20.sql.gz 
webbmaster_bellarose_joomla-2010-01-21.sql.gz 
webbmaster_bellarose_joomla-2010-01-22.sql.gz 
webbmaster_bellarose_joomla-2010-01-23.sql.gz 
webbmaster_bellarose_joomla-2010-01-24.sql.gz 
webbmaster_bellarose_joomla-2010-01-25.sql.gz 
webbmaster_bellarose_joomla-2010-01-26.sql.gz 
webbmaster_bellarose_joomla-2010-01-27.sql.gz 
webbmaster_bellarose_joomla-2010-01-28.sql.gz 
webbmaster_bellarose_joomla-2010-01-29.sql.gz 
/tmp/so/files>ls *sql* | tac | sed 1,7d | tr '\012' '\000' | xargs -0 --no-run-if-empty rm 
/tmp/so/files>ls -1 ./* 
./webbmaster_bellarose_joomla-2010-01-23.sql.gz 
./webbmaster_bellarose_joomla-2010-01-24.sql.gz 
./webbmaster_bellarose_joomla-2010-01-25.sql.gz 
./webbmaster_bellarose_joomla-2010-01-26.sql.gz 
./webbmaster_bellarose_joomla-2010-01-27.sql.gz 
./webbmaster_bellarose_joomla-2010-01-28.sql.gz 
./webbmaster_bellarose_joomla-2010-01-29.sql.gz 
/tmp/so/files>comm -3 ../existing_files.8601 ../targets_for_purging.8601 
./webbmaster_bellarose_joomla-2010-01-23.sql.gz 
./webbmaster_bellarose_joomla-2010-01-24.sql.gz 
./webbmaster_bellarose_joomla-2010-01-25.sql.gz 
./webbmaster_bellarose_joomla-2010-01-26.sql.gz 
./webbmaster_bellarose_joomla-2010-01-27.sql.gz 
./webbmaster_bellarose_joomla-2010-01-28.sql.gz 
./webbmaster_bellarose_joomla-2010-01-29.sql.gz 
/tmp/so/files> 
+0

Bon conseil pour aller de l'avant. – Eddie

0
OLDIFS="$IFS" 
IFS=$'\n' 
topurge=($(find -mindepth 1 -printf "%[email protected] %P\n" | sort -n -r | cut -d' ' -f 2- | tail -n +7)) 
IFS="$OLDIFS" 
+0

Cette imprime au plus 1 fichier dans mon test, et il ne semble pas être le plus ancien ou plus récent, un seul fichier aléatoire du groupe . – Eddie

+0

Ce serait parce qu'il crée un tableau. Essayez 'for f in" $ {topurge [@]} "; fais écho "$ f"; fait à la place. –

0

Voici une pensée:

oldest_to_keep=`find . -name \*.sql | xargs \ls -1rc | tail -7 | head -1` 
find . -name \*.sql -not -samefile $oldest_to_keep -not -newer $oldest_to_keep 

Lorsque la seconde découverte devrait avoir -exec rm \{\} ; si vous avez vous-même convaincu que ce est sain d'esprit. :)

+0

c'est la liste des 7 plus récentes dans mon test. .. mais un bon début je peux travailler avec peut-être /. – Eddie

2

Si les fichiers sont tous dans un répertoire (vous n'avez pas besoin d'utiliser find pour se récursif si sous-répertoires), vous pouvez utiliser l'argument -t de ls (1) pour ordonner la liste de fichiers par temps puis enlever les 7 premières entrées avec la queue (1).

rm -f $(ls -t *sql* | tail -n +8) 

[Edit: I -f ajouté dans le cas où les résultats de substitution dans une liste vide]

ou dans une boucle ...

ls -t *sql* | tail -n +8 | while read file 
    echo "Purging: $file" 
    rm "$file" 
done 

L'argument de la queue est 8 parce vous voulez qu'il commence à partir de la 8e ligne (c.-à-goutte les 7 premiers). Après avoir supprimé les fichiers, vous pouvez simplement graver ce qui reste.

+0

Ouais encore, je veux conserver le plus récent 7, pas supprimer. pour tout répertoire donné n qui pourrait signifier la suppression de 0 ou de 63 fichiers. – Eddie

+0

Ceci préserve le 7 le plus récent. Il supprime n'importe quoi après le 7. Le commentaire sur la suppression des sept premières entrées est de les supprimer de la liste des fichiers à purger (c'est-à-dire que vous les gardez). – camh

Questions connexes