Re: bash or sed script
Jacques L'helgoualc'h <lhh+no_spam@free.fr> wrote:
| 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
Ce dernier script marche à MERVEILLE.
Tous les anciens fichiers sont enlevés et un nouveau du jour est
crée; si un nouveau du jour existe déjà celui-ci est remplacé !
Reste encore:
- si plusieurs répertoires à sauver.
- que le script s'exécute lors du login à la machine par
l'utilisateur (workstation).
C'est trop demandé ?
Déjà merci pour ton temps.
mess-mate
--
A few hours grace before the madness begins again.
Reply to: