OVH Cloud OVH Cloud

bash or sed script

10 réponses
Avatar
mess-mate
Bonsoir,
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
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
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.

Meric d'avance au spécialistes.

mess-mate
--
You prefer the company of the opposite sex, but are well liked by your own.


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

10 réponses

Avatar
Jacques L'helgoualc'h
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


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
mess-mate
Jacques L'helgoualc'h <lhh+ 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.


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
mess-mate a écrit, mardi 7 juin 2005, à 16:39 :
Jacques L'helgoualc'h <lhh+ wrote:


[...]
| 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
| }
|
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.



tar czf "$ARCHIVE_DU_JOUR" /rep1/à/sauver /rep2 /rep3 fichier1 fichier2 ... && {

Tar a aussi une option --files-from FICHIER_LISTE.


- que le script s'exécute lors du login à la machine par
l'utilisateur (workstation).



Heu, tu risques de te loger plusieurs fois ? Je mettrais plutôt ça dans
un cron quotidien --- ou en refusant de le faire deux fois :


ARCHIVE_DU_JOUR=...

cd /rep/des/archives/ &&
if [ ! -f "$ARCHIVE_DU_JOUR" ]; then
tar czf ...
# etc

fi

et l'appel du script dans ~/.bash_profile, ~/.bash_login, ou ~/.profile,
cf. INVOCATION dans man bash. Vérifie aussi si ça marche avec un
[gkw]dm quelconque ...

C'est trop demandé ?



Bah non.

Déjà merci pour ton temps.



de rien,
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
J.Pierre Pourrez
Le Tue, 07 Jun 2005 16:39:13 +0200, mess-mate a écrit :

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).



AMHA, logrotate devrait pouvoir faire le job:
ne garder que N fichiers
compresser
lancer la tâche avec crontab

C'est juste une idée
Jean-Pierre



--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
mess-mate
J.Pierre Pourrez wrote:
| Le Tue, 07 Jun 2005 16:39:13 +0200, mess-mate a écrit :
|
| > 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).
|
| AMHA, logrotate devrait pouvoir faire le job:
| ne garder que N fichiers
| compresser
| lancer la tâche avec crontab
|
| C'est juste une idée
| Jean-Pierre
La crontab exécute à une certaine heure, non ?
Donc pas utilisable pour mon cas.
En outre pour sauvegarder des rép. comm par ex. /etc il faut les
permissions root.
Comment faire ?

mess-mate
--
Beware of a tall blond man with one black shoe.


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
mess-mate a écrit, mercredi 8 juin 2005, à 13:51 :
[...]
La crontab exécute à une certaine heure, non ?
Donc pas utilisable pour mon cas.



Avec anacron, alors ?

En outre pour sauvegarder des rép. comm par ex. /etc il faut les
permissions root.
Comment faire ?



Sous root, ou avec sudo.
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
mess-mate
Jacques L'helgoualc'h <lhh+ wrote:
| mess-mate a écrit, mercredi 8 juin 2005, à 13:51 :
| [...]
| > La crontab exécute à une certaine heure, non ?
| > Donc pas utilisable pour mon cas.
|
| Avec anacron, alors ?
|
| > En outre pour sauvegarder des rép. comm par ex. /etc il faut les
| > permissions root.
| > Comment faire ?
|
| Sous root, ou avec sudo.
| --
D'accord je vais voire la man de anacron.
Mais un sudo ne marche pas DANS un script ?
(pas pour exécuter le script )
Pour être plus clair: j'ai donc plusieurs rép. à sauvegarder de mon
HOME plus au moins le /etc qui lui est sous root.


mess-mate
--
Q: What do Winnie the Pooh and John the Baptist have in common?
A: The same middle name.


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
Frédéric LEGER a écrit, mercredi 8 juin 2005, à 17:06 :
Bonjour,



bonjour,

Je ne comprends pas bien le concept, pourquoi ne pas faire tourner cela
sous root via une tâche cron classique exécuté au reboot ?



C'est justement ce que fait anacron, rattraper le boulot en retard quand
on rallume la machine (ça peut être un peu casse-pieds quand on revient
chez soi en début de semaine et de mois :)

mess-mate a écrit :


[...]
>Mais un sudo ne marche pas DANS un script ?



Bin si, « sudo commande », avec l'option NOPASSWD: pour autoriser le
lancement de commande (inutile dans le sens root-->user). Man sudoers.

>(pas pour exécuter le script )
>Pour être plus clair: j'ai donc plusieurs rép. à sauvegarder de mon
>HOME plus au moins le /etc qui lui est sous root.



Bon, c'est plutôt à root de faire la sauvegarde, alors ... tu peux aussi
séparer, d'autant que c'est un trou de sécurité (selon l'umask de root).

root # tar cf trou.tar /etc/sudoers /etc/shadow
tar: Retrait de l'en-tête `/' des noms des membres
root # l trou.tar
-rw-r--r-- 1 root root 10240 jun 8 17:31 trou.tar
root # tar tvf trou.tar
-r--r----- root/root 310 2001-07-07 18:38:45 etc/sudoers
-rw-r----- root/shadow 1088 2005-04-29 15:34:42 etc/shadow

lhh $ tar xvf /root/trou.tar
etc/sudoers
etc/shadow
lhh $ ls -l etc
total 8
-rw-r----- 1 lhh root 1088 avr 29 15:34 shadow
-r--r----- 1 lhh root 310 jui 7 2001 sudoers

--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
mess-mate
Frédéric LEGER wrote:
| Bonjour,
|
| Je ne comprends pas bien le concept, pourquoi ne pas faire tourner cela sous root via une
| tâche cron classique exécuté au reboot ?
|
| mess-mate a écrit :
|
| >Jacques L'helgoualc'h <lhh+ wrote:
| >| mess-mate a écrit, mercredi 8 juin 2005, à 13:51 :
| >| [...]
| >| > La crontab exécute à une certaine heure, non ?
| >| > Donc pas utilisable pour mon cas. | | Avec anacron, alors ?
| >| | > En outre pour sauvegarder des rép. comm par ex. /etc il faut les
| >| > permissions root.
| >| > Comment faire ?
| >| | Sous root, ou avec sudo.
| >| -- D'accord je vais voire la man de anacron.
| >Mais un sudo ne marche pas DANS un script ?
| >(pas pour exécuter le script )
| >Pour être plus clair: j'ai donc plusieurs rép. à sauvegarder de mon
| >HOME plus au moins le /etc qui lui est sous root.
Oui, c'est vrai, j'y ai pas pensé.
Mais comment fait-on pour que le cron ne l'exécute q'au boot ?


mess-mate
--
Q: How many elephants can you fit in a VW Bug?
A: Four. Two in the front, two in the back.

Q: How can you tell if an elephant is in your refrigerator?
A: There's a footprint in the mayo.

Q: How can you tell if two elephants are in your refrigerator?
A: There's two footprints in the mayo.

Q: How can you tell if three elephants are in your refrigerator?
A: The door won't shut.

Q: How can you tell if four elephants are in your refrigerator?
A: There's a VW Bug in your driveway.


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
mess-mate
mess-mate wrote:
| Frédéric LEGER wrote:
| | Bonjour,
| |
| | Je ne comprends pas bien le concept, pourquoi ne pas faire tourner cela sous root via une
| | tâche cron classique exécuté au reboot ?
| |
| | mess-mate a écrit :
| |
| | >Jacques L'helgoualc'h <lhh+ wrote:
| | >| mess-mate a écrit, mercredi 8 juin 2005, à 13:51 :
| | >| [...]
| | >| > La crontab exécute à une certaine heure, non ?
| | >| > Donc pas utilisable pour mon cas. | | Avec anacron, alors ?
| | >| | > En outre pour sauvegarder des rép. comm par ex. /etc il faut les
| | >| > permissions root.
| | >| > Comment faire ?
| | >| | Sous root, ou avec sudo.
| | >| -- D'accord je vais voire la man de anacron.
| | >Mais un sudo ne marche pas DANS un script ?
| | >(pas pour exécuter le script )
| | >Pour être plus clair: j'ai donc plusieurs rép. à sauvegarder de mon
| | >HOME plus au moins le /etc qui lui est sous root.
| Oui, c'est vrai, j'y ai pas pensé.
| Mais comment fait-on pour que le cron ne l'exécute q'au boot ?
|
Bien, c'est fait. Lire la man mess-mate !
C'est dommage qu'il n'existe que l'option @reboot dans la crontab.
Ca prends pas mal de temps malgré une machine très rapide.
Merci à tous pour votre aide !!!!!
A titre de revanche :-)
mess-mate
--
Conscience doth make cowards of us all.
-- Shakespeare


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact