Commande if pour comparaison de fichiers

Résolu
stephbret56 Messages postés 195 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je travail sous un système d'exploitation AIX et je recherche la commande de comparaison d'un fichier à un autre

J'ai essayé

if [ -f /tmp/fic1 = /tmp/fic2 ]
then
echo " Le fichier fic1 est identique au fichier fic2"
else
echo "Le fichier fic1 n'est pas identique au fichier fic2"
fi

Je passe toujours dans l'echo "Le fichier fic1 est identique au fichier fic2" même si les fichiers sont différents.
Comment puis-je faire avec la commande if

merci de votre aide
Configuration: UNIX
AIX

9 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    utilises plutôt la commande diff ou cmp
    1
  2. Manu
     
    Bonjour

    Je suppose que ce sont les contenus de fichier (et non leurs noms) que vous voulez comparer...

    Si oui, if faut utiliser l'option -q de diff, ça répond 0 (TRUE) s'il y a une différence

    if diff -q fichier1 fichier2
    then
    echo different files
    else
    echo identical files
    fi

    Manu
    1
  3. jj
     
    bonjour,

    la commande diff fic1 fic2 liste les différences (si il y en a)

    la commande cmp renvoie false dès que la comparaison échoue (les deux fichiers sont différents

    reste plus que le if à contruire ...
    0
  4. stephbret56 Messages postés 195 Statut Membre 6
     
    Merci pour le réponse j'ai réussi à construire le if avec le diff je vous donnes la réponse

    #!/bin/ksh

    if diff /tmp/dif1 /tmp/dif2 1>/dev/null
    then
    echo "Le Fichier dif1 est identique au fichier dif2"
    else
    echo "Le Fichier dif1 n'est pas identique au fichier dif2"
    fi

    Merci encore de l'aide à bientot et bon week-en à tous
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    je commencerais par comparer la taille des fichiers. Si elle est différente, pas besoin de diff qui peut être long sur des gros fichiers.
    0
  7. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    en fait tu n'as pas besoin de if
    lami20j@debian:~$ cat fic1
    bla bla bla
    lami20j@debian:~$ cat fic2
    bla bla bla
    lami20j@debian:~$ cat fic3
    tra la la
    lami20j@debian:~$ diff -q fic1 fic2
    lami20j@debian:~$ diff -q fic1 fic3
    Les fichiers fic1 et fic3 sont différents.
    lami20j@debian:~$ diff -q fic1 fic2 && echo "les fichiers sont identiques"
    les fichiers sont identiques
    lami20j@debian:~$ diff -q fic1 fic3 && echo "les fichiers sont identiques"
    Les fichiers fic1 et fic3 sont différents.
    lami20j@debian:~$

    0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    diff -q est une option diff Linux, je ne suis pas sûr qu'elle existe sur AIX
    0
  9. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    alors il pourra faire comme ça ;-)
    lami20j@debian:~$ cat fic1
    bla bla bla
    lami20j@debian:~$ cat fic2
    bla bla bla
    lami20j@debian:~$ cat fic3
    tra la la
    lami20j@debian:~$ cat mydiff.sh
    #!/bin/sh
    
    test=$(diff $1 $2);
    if [ -z "$test" ];then
            echo "fichiers identiques"
    else
            echo "fichiers différents"
    fi
    lami20j@debian:~$ sh mydiff.sh fic1 fic2
    fichiers identiques
    lami20j@debian:~$ sh mydiff.sh fic1 fic3
    fichiers différents
    lami20j@debian:~$
    --
    106485010510997108
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      mais si les fichiers sont grands, on peut arrêter le diff à la première différence
      diff f1 f2 | awk '/^</ {exit 1}'
      0
    2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Ou utiliser bdiff ;-))
      0
    3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Re,

      je suis d'accord avec toi
      c'est inutile de tester jusqu'au bout si une différence est trouvée
      0
    4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
       
      Faignant ;-DDD
      0
    5. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Ben, pour une fois ce n'est pas moi, c'est lui ;-DDD

      en plus il parle en SMS diff f1 f2 | awk '/^</ {exit 1}' ;-DDDDD
      0
  10. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Effectivement l'option "-q" n'est pas présente sur la commande "diff" des "AIX" (voir Commands reference - man diff)

    Par contre la commande "cmp" est la même sur UNIX et GNU/Linux :
    [tmpfs]$ cat fic1
    blablabla
    [tmpfs]$ cat fic2
    blablabla
    [tmpfs]$ cat fic3
    bla bla bla
    [tmpfs]$ cmp -s fic1 fic2
    [tmpfs]$ echo $?
    0
    [tmpfs]$ cmp -s fic1 fic3
    [tmpfs]$ echo $?
    1
    [tmpfs]$
    ;-))
    0