[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bash or sed script



mess-mate a écrit, mardi 7 juin 2005, à 00:42 :
> Bonsoir,

bonjour,

> comme j'ai pas d'expérience avec l'extraction d'une partie de mot
> d'un mot, voici mon pb:
> J'ai un fichier Boot-07.tgz
> de ce fichier je voudrais y retrouver le '07' qui représente le n°
> du jour

 $ FILE="Boot-07.tgz"

 $ NUM="${FILE#Boot-}"
 $ NUM="${NUM.tgz}"

Avec un champ de longueur fixe, on a aussi ${paramètre:début:longueur} ;
le suivant est

 numero="$(printf '%02d' $[ "$NUM" + 1 ])"
 $ echo "$numero"
08


> et si il est plus petit que celui que je vais créer au jour '08',
> qu'il soit effacé.
> Il est évident si plus facile que je pourrais aussi bien créer le
> fichier '07-boot.tgz'
> 
> Ou tout simplement numéroter en continu ( plus le n° du jour) ce
> fichier.Càd 1-boot.tgz, 2-boot.tgz

Il me  semble plus commode d'utiliser  la date, avec  un format assurant
l'ordre chronologique  ; on  évite ainsi de  dépendre de la  présence de
l'archive précédente pour déterminer le numéro.

 $ date '+%Y-%m-%d'
2005-06-07

et la date d'hier est

 $ date '+%Y-%m-%d' -d '1 day ago'
2005-06-06

> et effacer le fichier avec le plus petit n°
> De ce fait j'aurais toujours qu'un seul fichier de backup qui
> passera par un crontab. 

Il me paraît  plus sûr d'attendre la création de  l'archive du jour pour
effacer les précédentes, si la place n'est pas un problème. 


Le script suivant devrait faire à peu près ce que tu demandes ?

ARCHIVE_DU_JOUR="Boot-$(date '+%Y-%m-%d').tgz"

tar czf "$ARCHIVE_DU_JOUR" /les/reps/à/sauver && { \
 ls -1 Boot-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].tgz | \
 grep -v -F "$ARCHIVE_DU_JOUR" | \
 xargs rm -f
}

-- 
Jacques L'helgoualc'h



Reply to: