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 640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 640
    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 640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 640
    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 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    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 640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 640
    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 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    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 640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 640
    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 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    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