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. 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. 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 ...
      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. 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. 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. Contributeur
              diff -q est une option diff Linux, je ne suis pas sûr qu'elle existe sur AIX
              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. 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]$
                ;-))