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: