web-dev-qa-db-fra.com

Comment tester si deux fichiers donnés sont identiques?

Vient de mettre à jour le code ... Je sors à chaque fois sur la séquence "autre". Vous pouvez télécharger le fichier update.sh à partir de mon serveur. il ne contient que echo "Hallo Update"

Code mis à jour (03.11.2015)

    #/bin/bash
    updateoldmd5=`sed -n l  globalupdate.aix`
    updatenewmd5=`md5sum update.sh |cut -d ' ' -f 1`


    if [ $updateoldmd5 =  $updatenewmd5 ]

    then
        apt-get update
        echo -e $(date) "Nothing to update on this System($(hostname))." >> globalupdate.log
        wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh
        echo "Done"

    else
        chmod +x /root/update.sh
        ./root/update.sh
        echo -e $(date) "System ($(hostname)) Updated." >> globalupdate.log
        echo ""
        md5sum update.sh |cut -d ' ' -f 1 > globalupdate.aix
        echo "Update done"
        #Get new update.sh file for next update check of the node system.
        wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh

    fi

Juste pour votre avis. Le fichier globalupdate.aix ne contient que le fichier MDSum du fichier update précédent.sh, pour comparer contre le nouveau téléchargé (pour vérifier si des modifications s'appliquent sur les systèmes). Ce script est sur le point de dépoly le même fichier update.sh à une Buch de serveurs Debian ...

4
sunwave121

Vous pouvez également utiliser cmp. De la page de l'homme - cmp - compare two files byte by byte. Il sort avec 0 si les fichiers correspondent.

[.____] si cmp -s "$ oldfile" "$ newfile"; alors 
 echo "rien n'a changé" 
 
 echo "quelque chose changé" [.____]
14
Daniel t.

Rester simple. Diff renvoie 1 sur la différence et 0 sur aucune différence. Utilisez une instruction IF. Voici comment vous pouvez dire la différence entre deux fichiers

if diff file1 file2 > /dev/null
then
    echo "No difference"
else
    echo "Difference"
fi

Pour résoudre votre problème (dans lequel vous comparez les différentes variables dans l'exemple ci-dessus, utilisez ceci (double équivaut est ce qui vous manque) .

#/bin/bash
updateoldmd5=`sed -n l  globalupdate.aix`
updatenewmd5=`md5sum update.sh |cut -d ' ' -f 1`    
if [ "$updateoldmd5" == "$updatenewmd5" ]
then
    apt-get update
    echo -e $(date) "Nothing to update on this System($(hostname))." >> globalupdate.log
    wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh
    echo "Done"
else
    chmod +x /root/update.sh
    ./root/update.sh
    echo -e $(date) "System ($(hostname)) Updated." >> globalupdate.log
    echo ""
    md5sum update.sh |cut -d ' ' -f 1 > globalupdate.aix
    echo "Update done"
    #Get new update.sh file for next update check of the node system.
    wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh
fi
8
yoshiwaan

Je ne peux pas suivre votre code, mais la commande que j'utilise généralement est

cd $DIR_WITH_ONE_FILE
if (cd $DIR_WITH_OTHER_FILE ; md5sum $FILE) | md5sum -c --status
then
    echo "same"
else
    echo "different"
fi

Cela dépend des deux fichiers ayant le même nom mais vivant dans différents répertoires. Ymmv.

0
hymie