Je me demandais si quelqu'un pouvait me dire s'il existe une fonction disponible sous unix, bash, qui compare toutes les lignes des fichiers. S'ils sont différents, il doit afficher vrai/faux, ou -1,0,1. Je sais que ces fonctions cmp existent dans d'autres langues. J'ai regardé autour des pages de manuel mais sans succès. S'il n'est pas disponible, quelqu'un pourrait-il m'aider à trouver une solution alternative?
Merci
Il y a plusieurs moyens de le faire:
cmp -s file1 file2
: Regardez la valeur de $?
. Zéro si les deux fichiers correspondent ou non nul dans le cas contraire.diff file1 file2 > /dev/null
: Certaines formes de la commande diff
peuvent prendre un paramètre qui lui dit de ne rien afficher. Cependant, la plupart ne le font pas. Après tout, vous utilisez diff
pour voir les différences entre deux fichiers. Encore une fois, le code de sortie (vous pouvez vérifier la valeur de $?
sera égal à 0 si les fichiers correspondent et différent de zéro dans le cas contraire.Vous pouvez utiliser ces commandes dans une instruction Shell if:
if cmp -s file1 file2
then
echo "The files match"
else
echo "The files are different"
fi
La commande diff
est spécialement conçue pour les fichiers texte. La commande cmp
devrait également fonctionner avec tous les fichiers binaires.
Il y a un simple cmp file file
commande qui fait exactement cela. Il renvoie 0 s'ils sont égaux et 1 s'ils sont différents, c'est donc trivial à utiliser dans if
s:
if cmp file1 file1; then
...
fi
J'espère que cela aide =)
#!/bin/bash
file1=old.txt
file2=new.txt
echo " TEST 1 : "
echo
if [ $( cmp -s ${file1} ${file2}) ]
then
echo "The files match"
else
echo "The files are different"
fi
echo
echo " TEST 2 : "
echo
bool=$(cmp -s "$file1" "$file2" )
if cmp -s "$file1" "$file2"
then
echo "The files match"
else
echo "The files are different"
fi
echo
echo " TEST 3 : "
echo
md1=$(md5 ${file1});
md2=$(md5 ${file2});
mdd1=$(echo $md1 | awk '{print $4}' )
mdd2=$(echo $md2 | awk '{print $4}' )
echo $md1
echo $mdd1
echo $md2
echo $mdd2
echo
#if [ $mdd1 = $mdd2 ];
if [ $mdd1 -eq $mdd2 ];
then
echo "The files match"
else
echo "The files are different"
fi
Vous pouvez faire un md5 sur les deux fichiers, puis comparer les résultats dans bash
.
Aucune boîte Unix ici à tester, mais cela devrait être correct.
#!/bin/bash
md1=$(md5 file1);
md2=$(md5 file2);
if [ $md1 -eq $ $md2 ]; then
echo The same
else
echo Different
fi
echo "lire le premier fichier" lire f1 echo "lire le second fichier" lire f2
diff -s f1 f2 # imprime si les deux fichiers sont identiques