IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Récupérer résultat de rsync


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Ingénieur intégration
    Inscrit en
    Août 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Août 2007
    Messages : 147
    Par défaut Récupérer résultat de rsync
    Bonjour,

    J'ai fait un petit script qui me copie de(s) fichier(s) d'un machine à une autre et mon soucis est de savoir si la copie s'est effectuée ou pas. Pour ce faire j'ai utilisé le mot --stats de rsync et j'obtiens ceci:
    sending incremental file list

    Number of files: 3
    Number of files transferred: 0
    Total file size: 1997744 bytes
    Total transferred file size: 0 bytes
    Literal data: 0 bytes
    Matched data: 0 bytes
    File list size: 75
    File list generation time: 0.001 seconds
    File list transfer time: 0.000 seconds
    Total bytes sent: 84
    Total bytes received: 12
    Donc mon idée est de récupérer les deux lignes contenants "Number of files". Voici mon script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #!/bin/bash -x
    SRC_PATH="/tmp/test_directory/config/*"
    DST_PATH[1]="<user>@<host>:/tmp/test_directory/config/dir1/test"
    DST_PATH[2]="<user>@<host>:/tmp/test_directory/config/dir2/test"
    DST_PATH[3]="<user>@<host>:/tmp/test_directory/config/dir3/test"
    OPTS="-auvz --stats -e ssh"
     
    for i in   1 2 3
    do
      RSYNC[$i]=`/usr/bin/rsync $OPTS $SRC_PATH ${DST_PATH[$i]} 2>&1 |grep Number|awk -F":" '{print $2}'`
      echo "rsync : ${RSYNC[$i]} "
    done
    Voici le résultat:
    rsync : 3
    0
    rsync : 3
    0
    rsync : 3
    0
    Comme je récupère le champs 2, j'ai les deux résultats 3 et 0! Sont-ils sur deux lignes? Comment les insérer chacun dans une variable pour que je puisse les tester?
    Y a-t-il une solution plus simple?

    Merci d'avance pour votre aide...


  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    Bonjour,

    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for i in ${!DST_PATH[@]}
    do
      RSYNC[$i]=$(/usr/bin/rsync $OPTS $SRC_PATH ${DST_PATH[$i]} 2>&1 | awk -F":[[:blank:]]*" '/^Number/{nf=nf?nf" "$2:$2}END{print nf}')
    done
    for i in "${RSYNC[@]}"
    do
       read a b <<<"$i"
       echo "traitement \$a : $a; traitement \$b : $b"
    done
    les éléments d'un tableau indexé, par défaut, sont numérotés à partir de 0 (zéro).
    pourquoi ne pas adopter le comportement par défaut ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DST_PATH=(
       "<user>@<host>:/tmp/test_directory/config/dir1/test"
       "<user>@<host>:/tmp/test_directory/config/dir2/test"
       "<user>@<host>:/tmp/test_directory/config/dir3/test"
    )
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Profil pro
    Ingénieur intégration
    Inscrit en
    Août 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Août 2007
    Messages : 147
    Par défaut
    Bonjour,

    Merci beaucoup pour la réponse! C'est mieux d'utiliser le comportement par défaut
    Toutefois, je ne comprends pas très bien la signification de ceci:
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    /^Number/{nf=nf?nf" "$2:$2}
    Il sélectionne Number mais que fais : nf=nf?nf? puis-je avoir quelques détails??

    Merci beaucoup

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    c'est une assignation conditionnelle : ?: est une sorte de "if...then...else"
    si la première expression (nf) est vrai, alors on considère la deuxième expression, sinon, c'est la troisième.
    cf. Gawk User's Guide #Expression conditionnelle
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Bonjour,

    non seulement l'assignation nf=nf est toujours vraie, mais la comparaison nf==nf l'est aussi.
    De plus, sur cette page prise au hasard, il est bien dit que l'assignation est prioritaire sur l'opérateur ternaire de condition.

    Es-tu formel sur le fait que cette ligne fait ce que tu veux?

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    Es-tu formel sur le fait que cette ligne fait ce que tu veux?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    awk 'BEGIN{var=var?" autre "var:"valeur"; print var}'
    valeur
    la ligne de commande le démontre : var n'a pas de valeur, donc elle prend la valeur en cas d'échec.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Hoooo. Je viens d'apprendre que l'assignation est une opération qui peut échouer.

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    je ne suis pas certain qu'elle soit testée
    ...
    ?

    EDIT: en fait, la page à laquelle tu te réfères est mal formatée.

    Citation Envoyé par man awk
    Operators
    The operators in AWK, in order of decreasing precedence, are
    [...]
    ?:
    The C conditional expression. This has the form expr1 ? expr2 : expr3. If
    expr1 is true, the value of the expression is expr2, otherwise it is expr3.
    Only one of expr2 and expr3 is evaluated.

    = += -= *= /= %= ^=
    Assignment. Both absolute assignment (var = value) and operator-assignment
    (the other forms) are supported.
    donc, intervenant après l'expression conditionnelle, l'affectation n'est pas considérée comme faisant partie du test.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre confirmé
    Profil pro
    Ingénieur intégration
    Inscrit en
    Août 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Août 2007
    Messages : 147
    Par défaut
    Merci pour l'aide et l'explication...

  10. #10
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Tout est plus clair. L'assignation est en dernier.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer résultat d'une requête
    Par nerila dans le forum Bases de données
    Réponses: 10
    Dernier message: 02/03/2007, 12h53
  2. Récupérer résultat d'une rotation
    Par Burckel dans le forum OpenGL
    Réponses: 5
    Dernier message: 14/12/2006, 17h08
  3. [MySQL] Récupérer résultat requête tableau
    Par Invité dans le forum JDBC
    Réponses: 2
    Dernier message: 03/05/2006, 08h22
  4. [VBA-E] Récupérer résultat d'une requête
    Par ragnarök dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2006, 16h21
  5. Réponses: 5
    Dernier message: 30/06/2005, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo