Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 27/02/2013, à 11:42

Postmortem

Re : Script bash permettant l'automatisation de la sauvegarde de conf'

elendil a écrit :

PS : J'ai juste trouvé un message d'erreur lors de la première exécution car il n'y a pas de fichiers IP.txt-DATE.
Du coup si tu ne veux pas ce message d'erreur, il faut remplacer la ligne 23 du script donné au post #18 par :

     for rlog in `ls $log-* 2> /dev/null`

En gros il faut juste rajouter le "2> /dev/null" pour que le message d'erreur ne s'affiche pas dans le terminal.

Il ne faut pas faire la boucle for ainsi, le ls est inutile.
Il faut faire :

log=toto
for rlog in $log-*
do
   # Traitement sur "$rlog" que l'on met bien entre guillemets, ce qui fera que les noms de ficher avec espace seront bien traités
done

Et dans ce cas, s'il n'y a pas de ficher correspondant à $log-*, un tour dans la boucle sera fait avec rlog=toto-*, l'étoile est gardée littéralement.
Pour éviter de rentrer dans la boucle lorsqu'il n'y a pas de fichier, il faut rajouter sur la ligne avant le for : shopt -s nullglob. Ça donne donc :

shopt -s nullglob
for rlog in $log-*
do
   # Traitement sur "$rlog" que l'on met bien entre guillemets, ce qui fera que les noms de ficher avec espace seront bien traités
done

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#27 Le 27/02/2013, à 11:46

Cuantos-Anos

Re : Script bash permettant l'automatisation de la sauvegarde de conf'

#!/bin/bash
# Répertoire tftpboot où se trouve les sauvegardes des fichiers de conf'
# On définie la variable date qui affichera la date de sauvegarde
DOSSIER="/tftpboot"
DATE_SAVE=$(date '+%Y%m%d-%H%M')

for fic in "$DOSSIER"/*.conf.txt
do
   mv "$fic" "$fic-$DATE_SAVE"
   tab_fic=( "$fic"* )
   [[ -f ${tab_fic[2]} ]] && rm "${tab_fic[0]}"
done

Ce code ci-dessus fonctionne parfaitement, merci ! smile
Je ne comprends juste pas le passage avec "tab"


"Seuls ceux qui sont assez fous pour penser qu'ils peuvent changer le monde y parviennent"

Hors ligne

#28 Le 27/02/2013, à 12:25

elendil

Re : Script bash permettant l'automatisation de la sauvegarde de conf'

Postmortem a écrit :

Pour éviter de rentrer dans la boucle lorsqu'il n'y a pas de fichier, il faut rajouter sur la ligne avant le for : shopt -s nullglob.

En effet c'est plus propre. Je ne connais pas très bien le fonctionnement de shopt du coup ce n'est pas un réflexe pour moi.

Hors ligne

#29 Le 27/02/2013, à 13:29

Postmortem

Re : Script bash permettant l'automatisation de la sauvegarde de conf'

Cuantos-Anos a écrit :

Je ne comprends juste pas le passage avec "tab"

La syntaxe tab=( ... ) permet de créer un tableau.
Par exemple :

$ tab=( a b c d )

Cela créé un tableau nommé tab (le tableau est détrui avant si déjà existant) qui contient 4 éléments. On peut utiliser ces éléments comme des variables :

$ echo "tab[0] vaut : ${tab[0]}"
tab[0] vaut : a

$ echo "tab[1] vaut : ${tab[1]}"
tab[1] vaut : b

$ echo "tab[2] vaut : ${tab[2]}"
tab[2] vaut : c

$ echo "tab[3] vaut : ${tab[3]}"
tab[3] vaut : d

Faire ceci :

tab_fic=( * )

créera un tableau avec tous les noms de fichiers/dossiers se trouvant dans le répertoire courant.

Cette partie :

[[ -f ${tab_fic[2]} ]] && rm "${tab_fic[0]}"

on vérifie que ${tab_fic[2]} est bien un fichier ; si c'est le cas, cela veut dire qu'il y a au moins 3 éléments dans le tableau, on supprime donc le fichier dont le nom est dans le 1er élément du tableau avec rm "${tab_fic[0]}"

elendil a écrit :

Je ne connais pas très bien le fonctionnement de shopt du coup ce n'est pas un réflexe pour moi.

shopt permet d'activer/désactiver des options de bash. Quand l'option nullglob est activée, si un "glob" ne se développe en rien, il est supprimé de la ligne de commande. Exemple :

$ ls
tata.txt  titi.txt  toto.txt
$ echo *.txt
tata.txt titi.txt toto.txt
$ rm *.txt
$ echo *.txt # Plus de fichier *.txt, *.txt est donc affiché litérallement
*.txt
$ shopt -s nullglob # activation de nullglob
$ echo *.txt # *.txt est donc supprimé avant exécution de la commande, c'est comme si on écrivait echo sans aucun argument

$ shopt -u nullglob # désactivation de nullglob
$ echo *.txt # on retrouve le fonctionnement normal
*.txt
$

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#30 Le 27/02/2013, à 14:50

elendil

Re : Script bash permettant l'automatisation de la sauvegarde de conf'

@Postmortem : Merci d'avoir pris le temps de donner des explications.

Une chose que ton script ne gère pas : c'est le cas où il y a plus de 3 versions. Dans ce cas là, il ne supprimera que l'élément 0 du tableau mais pas le 2cd.
Ce cas là ne devrait pas arriver si seul ce script est utilisé mais sait-on jamais.

D'autre part, ton script déplace le fichier log mais le le copie pas et il m'avait semblé que Cuantos-Anos voulait copier et pas déplacer.

Hors ligne

#31 Le 27/02/2013, à 15:17

Cuantos-Anos

Re : Script bash permettant l'automatisation de la sauvegarde de conf'

Merci bien pour tes explications @Postmortem ! smile

Concernant le résultat obtenu, c'est celui que je souhaitait :

10.20.32.43.conf.txt-20130227-1024  192.168.254.66.conf.txt-20130227-1024
10.20.32.43.conf.txt-20130227-1413  192.168.254.66.conf.txt-20130227-1413

> J'obtiens bien DEUX versions différentes pour chaque fichier de conf' (deux dates différentes smile ). Ainsi, lorsque mon script bash s'éxécutera automatiquement chaque dimanche de la semaine, mon répertoire contiendra à chaque fois deux versions pour chaque fichiers de conf', la dernière (de la semaine dernière quoi) et celle d'aujourd'hui wink.
Je te remercie aussi Elendil, et j'espère que tu as bien compris ce que j'ai voulu dire juste au dessus.


"Seuls ceux qui sont assez fous pour penser qu'ils peuvent changer le monde y parviennent"

Hors ligne

#32 Le 27/02/2013, à 15:38

Cuantos-Anos

Re : Script bash permettant l'automatisation de la sauvegarde de conf'

Concernant la commande mv, elle "renomme" le fichier et non le déplace. Elle renomme le fichier avec une date plus récente, ayant subit ou non des modifications. Ainsi, le fichier est rennomé en fonction de l'heure et la date d'éxécution de mon script, donc parfait smile


"Seuls ceux qui sont assez fous pour penser qu'ils peuvent changer le monde y parviennent"

Hors ligne

#33 Le 27/02/2013, à 16:25

elendil

Re : Script bash permettant l'automatisation de la sauvegarde de conf'

Cuantos-Anos a écrit :

Concernant la commande mv, elle "renomme" le fichier et non le déplace.

Pas exactement pour être précis, mv sert à déplacer (mv = move) un fichier mais dans le cas où le fichier de destination n'existe pas, ça revient à renommer un fichier.

La seule différence (hormis la méthode) avec le script de postmortem est que le mien copie et ne déplace pas (chose que tu peux changer en remplaçant cp par mv :-)).
Je partais du principe que tu voulais conserver un fichier nommé IP.conf.txt en permanence dans ton dossier (ça me semblait plus logique).

Si c'est résolu, tu peux éditer ton premier message pour ajouter [Résou] dans le tire.

Hors ligne

#34 Le 27/02/2013, à 16:28

Postmortem

Re : Script bash permettant l'automatisation de la sauvegarde de conf'

elendil a écrit :

Une chose que ton script ne gère pas : c'est le cas où il y a plus de 3 versions. Dans ce cas là, il ne supprimera que l'élément 0 du tableau mais pas le 2cd.

Au cas où il y aurait plus de 3 versions, on peut ne garder que les 2 dernières en remplaçant :

[[ -f ${tab_fic[2]} ]] && rm "${tab_fic[0]}"

par :

[[ -f ${tab_fic[2]} ]] && rm "${tab_fic[@]:0:${#tab_fic[@]}-2}"

${#tab_fic[@]} : nombre d'éléments du tableau tab_fic
${tab_fic[@]:0:3} : les 3 premiers éléments du tableau
${tab_fic[@]:1:4} : 4 éléments du tableau en partant du 2ème (on en saute 1)
Et donc ${tab_fic[@]:0:${#tab_fic[@]}-2} : tous les éléments du tableau sauf les 2 derniers


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#35 Le 27/02/2013, à 16:58

Cuantos-Anos

Re : Script bash permettant l'automatisation de la sauvegarde de conf'

Il n'est pas question de 3 versions, puisqu'il y a suppression à chaque éxécution du script de la version la plus ancienne de chaque fichier, exemple :

10.20.32.43.conf.txt-20130227-1024  192.168.254.66.conf.txt-20130227-1024
10.20.32.43.conf.txt-20130227-1413  192.168.254.66.conf.txt-20130227-1413

Ainsi, si j'éxécute mon script maintenant (à 15h56 précisément), la version de chaque fichier "20130227-1024" va disparaitre pour laisser place à celle de 14h13 déja présente et celle de maintenant, soit 20130227-1556. Et ainsi de suite...:)


"Seuls ceux qui sont assez fous pour penser qu'ils peuvent changer le monde y parviennent"

Hors ligne

#36 Le 27/02/2013, à 17:38

elendil

Re : Script bash permettant l'automatisation de la sauvegarde de conf'

Non en effet le script en lui même ne devrait pas laisser 3 versions par contre un utilisateur (ou n'importe quel autre programme) peut faire une copie/sauvegarde/ou autre d'un fichier et alors il y aura plus de 3 versions de fichier.

(Je pensais entre autre aux éditeurs de texte qui pour certains font des sauvegardes automatiques avec un tilde à la fin du nom).

@Postmortem : merci pour les explications.

@Cuantos-Anos : Pense à mettre résolu dans le titre.

Hors ligne