[SHELL] problème extraction de chaîne

Fermé
[ROX] - 1 févr. 2010 à 17:15
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 2 févr. 2010 à 09:25
Bonjour,
Je vais vous exposer mon problème :
j'ai un serveur central et 5 serveurs secondaires, chaque serveur secondaires contient les données de chaque service qui y sont répertoriés
tous les soirs je veux effectuer une sauvegarde automatisée et sécurisée des données modifiées de chacun des serveurs vers le serveur central ...

Je travaille au préalable sur un script shell qui sera exécuté par une commande cron (de ma crontab)
J'aimerai déjà savoir si je suis sur la bonne voie avec ce script :

#!/bin/bash
date=`date`
destination < ???

#teste si le répertoire destination existe
if [ ! -e "$destination" ]; then
echo "ERREUR : La destination $destination n'a pas pu être synchronisée car le répertoire de destination n'a pas été trouvé, le $date" 2>&1 <chemin_fichier_log>
#on passe une ligne pour espacer les redirections
echo "" >> <chemin_fichier_log>
exit
fi

#la variable rsync recevra le contenu du fichier <fichier_commande>
rsync < <chemin_fichier_commande>

echo "la sauvegarde de $source jusque $destination a été effectuée avec succès le $date" >> <chemin_fichier_log>
#on passe une ligne pour espacer les redirections
echo "" >> <chemin_fichier_log>


Qu'en pensez-vous ?

Maintenant, dans mon script, j'ai souligné les éléments qui me causent du soucis, j'aimerai extraire une chaine de type 'root@<ip_srv_distant1>:<chemin_destination1>' d'un fichier texte pour la mettre dans la variable $destination pour pouvoir détecter après si cette destination existe ou non

Je ne vois pas trop quelle syntaxe utiliser après 'destination < ...'

Quelqu'un pourrait m'éclaircir les idées à ce propos ?

Merci d'avance
A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
1 févr. 2010 à 19:26
Salut,

j'aimerai extraire une chaine de type 'root@<ip_srv_distant1>:<chemin_destination1>' d'un fichier texte pour la mettre dans la variable $destination pour pouvoir détecter après si cette destination existe ou non
Et il y a quoi d'autre dans ton fichier ?
Sans plus d'info (exemple) il est difficile de te pondre une commende adéquate ;-((

Et puis ton serveur "rsync" tu y accèdes comment ? Via ssh ou tu as un daemon rsyncd qui tourne dessus ?

0
Oui dsl ^^
et bien le fichier dont je parle contiendra juste la commande :
"rsync -rupgoz -e ssh login@<ip_srv_distant>:<chemin_destination> <chemin_source>"
et je voudrais juste extraire la partie "login@<ip_srv_distant>:<chemin_destination>"

la connexion s'établit grâce au protocole ssh (donc pas de rsyncd)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
1 févr. 2010 à 20:10
[tmpfs]$ cat plop
Oui dsl ^^
et bien le fichier dont je parle contiendra juste la commande :
rsync -rupgoz -e ssh login@<ip_srv_distant>:<chemin_destination> <chemin_source>
et je voudrais juste extraire la partie "login@<ip_srv_distant>:<chemin_destination>"

la connexion s'établit grâce au protocole ssh (donc pas de rsyncd)

[tmpfs]$ sed -n '/^rsync/ s/.*ssh \([^ ]*\) .*/\1/p' plop
login@<ip_srv_distant>:<chemin_destination>

[tmpfs]$

;-))
0
[tmpfs]$ sed -n '/^rsync/ s/.*ssh \([^ ]*\) .*/\1/p' plop
login@<ip_srv_distant>:<chemin_destination>

[tmpfs]$


heu ... ouai ... concrètement ça signifie quoi cet enchainement de symboles ?
Parce que j'ai jamais vu une suite d'options et compagnie comme celle-ci :-p
(Je parle de la 1e ligne)

Pourrais-tu éclaircir ton développement ?
Je veux bien croire que ça puisse résoudre mon problème mais ta commande ne me dis rien

... je ne connais pas le scripting sed, je sais seulement que c'est un outil puissant de gestion de chaînes de caractères
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
2 févr. 2010 à 09:25
-n
Affichage sur demande. Marche avec le paramètre "p" en fin de syntaxe.

/^rsync/
On cherche le motif (rsync) en début de ligne "^"


s
Commande "s" de substitution



/
Délimiteur gauche de mise en correspondance


.*ssh
On cherche une chaine de caractère qui englobe tout (.*) jusqu'à ce qu'elle rencontre le mot 'ssh' suivi d'un espace


\(
Début d'une sous chaine.


[^ ]*
La sous chaine comprendra une suite de caractère jusqu'à ce qu'elle rencontre une espace.
[^ ] signifie à l'exception d'un espace


\)
Fin de la sous-chaine



.*
Un espace suivi par tous les caractères restant



/
Fin du délimiteur gauche (correspondance) et début de la partie droite de remplacement



\1
Référence arrière faisant référence au contenu de la sous-chaine



/
Délimiteur de fin de la partie droite de remplacement


p
On affiche le motif.


Pur plus de détails voir "sed".
0