Commande if pour comparaison de fichiers

Résolu
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. Modérateur
    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]$
    ;-))
    1. Modérateur
      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
      1. Contributeur
        mais si les fichiers sont grands, on peut arrêter le diff à la première différence
        diff f1 f2 | awk '/^</ {exit 1}'
      2. Modérateur
        @dubcekRe,

        je suis d'accord avec toi
        c'est inutile de tester jusqu'au bout si une différence est trouvée
      3. Modérateur
        @jipicyBen, 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
    2. Contributeur
      diff -q est une option diff Linux, je ne suis pas sûr qu'elle existe sur AIX
      1. Modérateur
        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:~$

        1. 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. Contributeur
            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.
            1. 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
              1. 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 ...