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 :

Erreur avec diff contenant des valeurs entre guillemets


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier Avatar de marcoxavier
    Homme Profil pro
    ADMINISTRATEUR SYSTEME UNIX
    Inscrit en
    Mai 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : ADMINISTRATEUR SYSTEME UNIX

    Informations forums :
    Inscription : Mai 2015
    Messages : 72
    Points : 75
    Points
    75
    Par défaut Erreur avec diff contenant des valeurs entre guillemets
    Bonjour,

    j'ai fais un petit script shell pour faire le listing des fichiers d'un répertoire et le comparer à tous les fichiers de 2 autres répertoire, afin de vérifier s'il trouve 2 fichiers identiques.

    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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #!/bin/bash
     
    files1=()
    files2=()
     
    # Directories to compare. Adding quotes at the begining and at the end of each files found in content1 & content3
     
    content2=$(find /data/logs -name "*.log" -type f)
    content1=$(find /data/other/logs1 -type f | sed 's/^/"/g' | sed 's/$/"/g')
    content3=$(find /data/other/logs2 -type f | sed 's/^/"/g' | sed 's/$/"/g')
     
    # ADDING CONTENT INTO FILES1 & FILES2 ARRAY
    while read -r line; do
            files1+=("$line")
    done <<< "$content1"
     
    # content1 and content3 goes into the same array
    while read -r line3;do
            files1+=("$line3")
    done <<< "$content3"
     
    while read -r line2; do
            files2+=("$line2")
    done <<< "$content2"
     
     
    # Here i'm trying to compare 1 by 1 the files in files2 to all files1
    for ((i=0; i<${#files2[@]}; i++))
    do
            for ((j=0; j<${#files1[@]}; j++))
            do
                    if [[ -n ${files2[$i]} ]];then
                            diff -s "${files2[$i]}" "${files1[$j]}" > /dev/null
                            if [[ $? == 0 ]]; then
                                    echo ${files1[$j]} "est identique a" ${files2[$i]}
                                    unset 'files2[$i]'
                                    break
                            fi
                    fi
            done
    done
     
    #SHOW THE FILES THAT DIDN'T MATCHED ANYTHING
    echo ${files2[@]}
    J'ai l'erreur suivante : diff: "/data/content3/other/log2/perso log/somelog.log": Aucun fichier ou dossier de ce type

    Pourtant le fichier existe quand je fait un ls sur le même chemin:

    ll "/data/content3/other/log2/perso log/somelog.log"
    -rw-rw-r-- 2 lopom lopom 551M 30 oct. 18:53 '/data/content3/other/logs2/perso log/somelog.log'

    J'ai selon moi besoin des guillements car dans certains chemins il peut y avoir des espaces, et diff l'interprète mal.

    J'ai essayé de mettre les valeurs dans les tableaux avec des simples guillemets mais ca ne résous pas le problème.

    J'espère avoir été assez compréhensible, je reste disponible si vous avez des questions.

    Merci par avance

  2. #2
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 101
    Points : 4 446
    Points
    4 446
    Par défaut
    bonjour
    Citation Envoyé par marcoxavier Voir le message
    J'ai l'erreur suivante : diff: "/data/content3/other/log2/perso log/somelog.log": Aucun fichier ou dossier de ce type
    Pourtant le fichier existe
    En fait existe le fichier /data/content3/other/log2/perso log/somelog.log mais pas "/data/content3/other/log2/perso log/somelog.log"Il faut donc juste supprimer les sed avec le find
    $moi= ( !== ) ? : ;

  3. #3
    Membre régulier Avatar de marcoxavier
    Homme Profil pro
    ADMINISTRATEUR SYSTEME UNIX
    Inscrit en
    Mai 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : ADMINISTRATEUR SYSTEME UNIX

    Informations forums :
    Inscription : Mai 2015
    Messages : 72
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par papajoker Voir le message
    bonjour

    En fait existe le fichier /data/content3/other/log2/perso log/somelog.log mais pas "/data/content3/other/log2/perso log/somelog.log"Il faut donc juste supprimer les sed avec le find
    Hello,

    Merci de ta réponse, mais dans ce cas comment je fais pour pas que l'espacement dans le chemin du fichier pose problème lors du diff ? Parce que du coup sans les guillements il m'interprète l'espace comme une valeur à comparer.
    Ca me sort l'erreur :

    diff: opérande supplémentaire « log/somelog.log »

  4. #4
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Pas de variable, lecture directe avec séparateur nul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while IFS='' read -r -d '' line; dodone < <(find /data/other/logs1 -type f -print0)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    • l'initialisation des tableau n'est pas utile
    • pourquoi stocker les données dans des variables "plates" pour ensuite les mettre dans un tableau ?!
    • le parcours du deuxième tableau autant de fois qu'il y a d'éléments dans le premier peut prendre énormément de temps.
    • Rappel : la structure de [if] c'est if COMMANDES; then COMMANDES; [ elif COMMANDES; then COMMANDES; ]... [ else COMMANDES; ] fi, donc, tester la valeur de retour d'une commande qui vient d'être exécutée est un non-sens.
    • unset 'tableau[$indice]' va continuellement supprimer le premier élément du tableau, parce que $indice ne sera développé entre des apostrophes !



    pourquoi ne pas parcourir l'arborescence du premier répertoire, et tester l'existence et la similitude du fichier correspondant dans le second répertoire ?
    il faut nous en dire plus sur la profondeur des répertoires.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre régulier Avatar de marcoxavier
    Homme Profil pro
    ADMINISTRATEUR SYSTEME UNIX
    Inscrit en
    Mai 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : ADMINISTRATEUR SYSTEME UNIX

    Informations forums :
    Inscription : Mai 2015
    Messages : 72
    Points : 75
    Points
    75
    Par défaut
    Bonjour,

    Merci de vos réponse.
    Pour te répondre N_BaH point par point :

    - l'initialisation des tableau n'est pas utile
    - pourquoi stocker les données dans des variables "plates" pour ensuite les mettre dans un tableau ?!

    Pour ces deux points je ne suis pas encore passé sur la relecture et l'optimisation du script, effectivement c'est à revoir.

    - Le parcours du deuxième tableau autant de fois qu'il y a d'éléments dans le premier peut prendre énormément de temps.

    C'est vrai mais ce n'est pas un problème pour l'utilisation que je vais en faire, après si tu as une solution pour optimiser le temps de traitement je suis preneur.

    - Rappel : la structure de [if] c'est if COMMANDES; then COMMANDES; [ elif COMMANDES; then COMMANDES; ]... [ else COMMANDES; ] fi, donc, tester la valeur de retour d'une commande qui vient d'être exécutée est un non-sens.

    Je suppose que tu parle de cette ligne : if [[ -n ${files2[$i]} ]]

    Effectivement dans une ancienne version du script ca posait problème de ne pas le mettre, mais je peux le retirer.

    unset 'tableau[$indice]' va continuellement supprimer le premier élément du tableau, parce que $indice ne sera développé entre des apostrophes !

    Je ne vois pas ce que tu veux dire par la, si tu peux développer ?

    pourquoi ne pas parcourir l'arborescence du premier répertoire, et tester l'existence et la similitude du fichier correspondant dans le second répertoire ?

    Alors pour être plus précis, j'utilise diff car le nom des fichiers n'est pas le même entre les 2 répertoires. Ensuite il existe beaucoup de sous dossier, l'arborescence pour un même fichier n'est pas identique dans les 2 répertoires. Justement la double boucle for, me permet de tester s'il existe 2 fichiers identiques dans ces deux répertoires, ce que je ne sais pas en avance.
    Le find -type f lui prend tous les fichiers du dossier que je lui donne y compris les sous dossier.

    En fait je ne suis pas sur de comprendre ce que tu entends pas la, car c'est déjà ce que je fais ? Je prend le fichier 1 et je regarde s'il existe un même fichier dans l'autre répertoire.

    J'espère que j'aurai été assez clair :s ?

    Merci encore.

  7. #7
    Membre régulier Avatar de marcoxavier
    Homme Profil pro
    ADMINISTRATEUR SYSTEME UNIX
    Inscrit en
    Mai 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : ADMINISTRATEUR SYSTEME UNIX

    Informations forums :
    Inscription : Mai 2015
    Messages : 72
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par balkany Voir le message
    Pas de variable, lecture directe avec séparateur nul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while IFS='' read -r -d '' line; dodone < <(find /data/other/logs1 -type f -print0)
    C'est une possibilité mais je ne pense pas que cela règle le problème du diff

  8. #8
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Si, tes noms de fichier seront correctement protégés.

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Si tout est mis correctement dans tes tableaux, autant passer par des boucle for de type liste d'argument, comme ça pas de soucis avec les espaces...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i in ${file2[@]}
    do
    ...
    ...
    done
    Ici, c'est "$i" qui porte le nom du fichier...
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    - Rappel : la structure de [if] c'est if COMMANDES; then COMMANDES; [ elif COMMANDES; then COMMANDES; ]... [ else COMMANDES; ] fi, donc, tester la valeur de retour d'une commande qui vient d'être exécutée est un non-sens.

    Je suppose que tu parle de cette ligne : if [[ -n ${files2[$i]} ]]
    non, je parle du if après le diff.

    unset 'tableau[$indice]' va continuellement supprimer le premier élément du tableau, parce que $indice ne sera développé entre des apostrophes !

    Je ne vois pas ce que tu veux dire par la, si tu peux développer ?
    ah! je viens de refaire un test, et il y a un truc bizarre :
    une variable entre apostrophe n'est pas développée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ var=abc
    $ echo '$var'
    $var
    mais lors d'une "désassignation" par unset d'un élément d'un tableau désigné par un indice, le développement est correctement effectué. bizarre.
    ne tiens pas compte de ma remarque alors.

    pourquoi ne pas parcourir l'arborescence du premier répertoire, et tester l'existence et la similitude du fichier correspondant dans le second répertoire ?
    Alors pour être plus précis, j'utilise diff car le nom des fichiers n'est pas le même entre les 2 répertoires. Ensuite il existe beaucoup de sous dossier, l'arborescence pour un même fichier n'est pas identique dans les 2 répertoires. Justement la double boucle for, me permet de tester s'il existe 2 fichiers identiques dans ces deux répertoires, ce que je ne sais pas en avance.
    Le find -type f lui prend tous les fichiers du dossier que je lui donne y compris les sous dossier.

    En fait je ne suis pas sur de comprendre ce que tu entends pas la, car c'est déjà ce que je fais ? Je prend le fichier 1 et je regarde s'il existe un même fichier dans l'autre répertoire.
    ok, je note.

    déjà, on peut "simplifier" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/bash
     
    readarray -d '' files1 < <(find /data/logs -name "*.log" -type f -print0; find /data/other/logs1 -type f -print0)
    readarray -d '' files2 < <(find /data/other/logs2 -type f -print0)
    mais... sais-tu que diff peut faire du récursif et remonter les fichiers qui différent dans des hiérarchies différentes ? ton script n'a alors plus beaucoup de raison d'être.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre régulier Avatar de marcoxavier
    Homme Profil pro
    ADMINISTRATEUR SYSTEME UNIX
    Inscrit en
    Mai 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : ADMINISTRATEUR SYSTEME UNIX

    Informations forums :
    Inscription : Mai 2015
    Messages : 72
    Points : 75
    Points
    75
    Par défaut
    Merci pour la simplification à la fin, c'est plus optimisé et marche tout pareil !

    Alors pour le diff, ouais je viens de voir avec -r pour la récursivité. Mais bon pour tester tous mes fichiers du répertoire 1 a ceux du répertoire 2 je dois toujours faire une boucle.
    Mais whatever; je sais même plus si mon problème persiste avec toutes les modifications que j'ai faite.

    Je fais le point avec moi même et je reviens vers vous, merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Mais bon pour tester tous mes fichiers du répertoire 1 a ceux du répertoire 2 je dois toujours faire une boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    diff -qr /data/logs /data/other/logs2
    diff -qr /data/other/logs1 /data/other/logs2
    et hop!
    pourquoi pas ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Membre régulier Avatar de marcoxavier
    Homme Profil pro
    ADMINISTRATEUR SYSTEME UNIX
    Inscrit en
    Mai 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : ADMINISTRATEUR SYSTEME UNIX

    Informations forums :
    Inscription : Mai 2015
    Messages : 72
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    diff -qr /data/logs /data/other/logs2
    diff -qr /data/other/logs1 /data/other/logs2
    et hop!
    pourquoi pas ?
    Ca ne va pas essayer de comparer tout le dossier a l'autre dossier ?
    En plus de cela je dois garder dans un tableau ou autre chaque fichier qui n'a pas été trouvé dans le 2ème répertoire

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Citation Envoyé par marcoxavier Voir le message
    Ca ne va pas essayer de comparer tout le dossier a l'autre dossier ?
    ce n'est pas ce que tu veux faire ?

    En plus de cela je dois garder dans un tableau ou autre chaque fichier qui n'a pas été trouvé dans le 2ème répertoire
    on peut traiter la sortie des diff dans une boucle...
    Code En gros : Sélectionner tout - Visualiser dans une fenêtre à part
    while read sortie; do case $sortie in 'je sais pas quoi' ) chaispasquoi+=( "$sortie" );; 'quoi dautre') quoidautre+=( "$sortie");; esac; done < <(diff ...; diff ...)
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  15. #15
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 101
    Points : 4 446
    Points
    4 446
    Par défaut
    j'ai de gros doutes avec "diff -r"
    Citation Envoyé par marcoxavier Voir le message
    j'utilise diff car le nom des fichiers n'est pas le même entre les 2 répertoires.
    Donc ici on compare toto.txt avec tata.txt ? "diff -r" ne le fait pas
    $moi= ( !== ) ? : ;

  16. #16
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par marcoxavier Voir le message
    Voici mon script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    ...
                    if [[ -n ${files2[$i]} ]];then
                            diff -s "${files2[$i]}" "${files1[$j]}" > /dev/null
                            if [[ $? == 0 ]]; then
    Citation Envoyé par N_BaH Voir le message
    • Rappel : la structure de [if] c'est if COMMANDES; then COMMANDES; [ elif COMMANDES; then COMMANDES; ]... [ else COMMANDES; ] fi, donc, tester la valeur de retour d'une commande qui vient d'être exécutée est un non-sens.

    Ce que j'imagine que veut dire N_BaH, c'est que tu peux remplacer ce code par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    ...
                    if test -n "${files2[$i]}"; then
                            if diff -s "${files2[$i]}" "${files1[$j]}" > /dev/null
                            then
    d'ailleurs, si tu veux juste comparer 2 fichiers sans réellement te préoccuper des différences, il est probablement beaucoup plus efficace d'utiliser cmp, car son algorithme est bôôôôcoup plus simple et, entre autres, il arrête la comparaison à la première différence trouvée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    ...
                    if test -n "${files2[$i]}"; then
                            if cmp -s "${files2[$i]}" "${files1[$j]}"
                            then

  17. #17
    Membre régulier Avatar de marcoxavier
    Homme Profil pro
    ADMINISTRATEUR SYSTEME UNIX
    Inscrit en
    Mai 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : ADMINISTRATEUR SYSTEME UNIX

    Informations forums :
    Inscription : Mai 2015
    Messages : 72
    Points : 75
    Points
    75
    Par défaut
    Hello,

    J'ai modifié un peu le script et il fonctionne comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #!/bin/bash
     
    readarray -d '' files1 < <(find path1 -type f -print0; find path2 -type f -print0)
    readarray -d '' files2 < <(find path3 -name *.log ! -name '*sample*' -type f -print0)
     
    for ((i=0; i<${#files2[@]}; i++))
    do
            for ((j=0; j<${#files1[@]}; j++))
            do
                    diff -s "${files2[$i]}" "${files1[$j]}" > /dev/null
                    if [[ $? == 0 ]]; then
                            present="yes"
                            echo ${files1[$j]} "est identique a" ${files2[$i]}
                            break
                    else
                            present="no"
                    fi
            done
            if [[ $present == "no" ]]; then
                    if [[ -n ${files2[$i]} ]];then
                            result+=("${files2[$i]}")
                            echo ${result[@]} "n'est pas présent"
                    fi
            fi
    done
     
    echo ${result[@]}
    Merci pour votre aide

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Ce que j'imagine que veut dire N_BaH, c'est que tu peux remplacer ce code par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    ...
                    if test -n "${files2[$i]}"; then
                            if diff -s "${files2[$i]}" "${files1[$j]}" > /dev/null
                            then
    non, non.
    ce dont je parle, c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    diff -s "${files2[$i]}" "${files1[$j]}" > /dev/null
    if [[ $? == 0 ]]
    qui devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if diff -s "${files2[$i]}" "${files1[$j]}" > /dev/null; then... fi
    Citation Envoyé par papjoker
    j'ai de gros doutes avec "diff -r"
    Citation Envoyé par marcoxavier
    j'utilise diff car le nom des fichiers n'est pas le même entre les 2 répertoires.
    Donc ici on compare toto.txt avec tata.txt ? "diff -r" ne le fait pas
    évidemment !


    EDIT : puisque tu n'utilises pas de bornes, for ((i=0; i<${#files2[@]}; i++)) peut être remplacé par for i in ${!files2[*]}; pareil pour j.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Pourquoi un test étendu if [[ $present == "no" ]]; then, quand un test simple suffit ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if [ "$present" = "no" ]
    then
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  20. #20
    Membre régulier Avatar de marcoxavier
    Homme Profil pro
    ADMINISTRATEUR SYSTEME UNIX
    Inscrit en
    Mai 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : ADMINISTRATEUR SYSTEME UNIX

    Informations forums :
    Inscription : Mai 2015
    Messages : 72
    Points : 75
    Points
    75
    Par défaut
    Effectivement je l'ai corrigé, et d'autres chose d'ailleurs, que je n'ai pas reposté depuis.
    Par exemple j'ai mis mon diff dans une condition IF comme me l'a préconisé N_BaH plus tôt dans la discution, je n'ai simplement pas posté le script à jour. Néanmoins celui que j'ai mis fonctionne, il y juste quelques petites améliorations à faire

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] problème avec la récupération des valeurs des variables POST
    Par Jasmine80 dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 11/05/2007, 16h08
  2. [SqlServer 2K] curseurs avec SELECT contenant des variables
    Par yinyang dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2006, 10h25
  3. Import avec fichier contenant des guillemets
    Par Maximus06 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/07/2006, 12h07
  4. Réponses: 18
    Dernier message: 28/04/2006, 11h00
  5. souci avec le format des valeurs numériques.
    Par LESOLEIL dans le forum Langage
    Réponses: 9
    Dernier message: 05/04/2006, 16h12

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