Quel est le moyen le plus simple (en utilisant un outil graphique ou une ligne de commande sur Ubuntu Linux) de savoir si deux fichiers binaires sont identiques ou non (à l'exception des horodatages) ? Je n'ai pas besoin d'extraire la différence. J'ai juste besoin de savoir s'ils sont identiques ou non.
Réponses
Trop de publicités?Vous pouvez utiliser la fonction de hachage MD5 pour vérifier si deux fichiers sont identiques. Avec cette fonction, vous ne pouvez pas voir les différences à un bas niveau, mais c'est un moyen rapide de comparer deux fichiers.
md5 <filename1>
md5 <filename2>
Si les deux hachages MD5 (la sortie de la commande) sont identiques, alors les deux fichiers ne sont pas différents.
Essayez diff -s
Réponse courte : courir diff
con el -s
interrupteur.
Longue réponse : lisez ce qui suit.
Voici un exemple. Commençons par créer deux fichiers dont le contenu binaire est aléatoire :
$ dd if=/dev/random bs=1k count=1 of=test1.bin
1+0 records in
1+0 records out
1024 bytes (1,0 kB, 1,0 KiB) copied, 0,0100332 s, 102 kB/s
$ dd if=/dev/random bs=1k count=1 of=test2.bin
1+0 records in
1+0 records out
1024 bytes (1,0 kB, 1,0 KiB) copied, 0,0102889 s, 99,5 kB/s
Maintenant, faisons une copie du premier fichier :
$ cp test1.bin copyoftest1.bin
Maintenant test1.bin et test2.bin devraient être différents :
$ diff test1.bin test2.bin
Binary files test1.bin and test2.bin differ
... et test1.bin et copyoftest1.bin devraient être identiques :
$ diff test1.bin copyoftest1.bin
Mais attendez ! Pourquoi n'y a-t-il pas de sortie ? !?
La réponse est la suivante : c'est un choix délibéré. Il n'y a pas de sortie sur des fichiers identiques.
Mais il y a différents codes d'erreur :
$ diff test1.bin test2.bin
Binary files test1.bin and test2.bin differ
$ echo $?
1
$ diff test1.bin copyoftest1.bin
$ echo $?
0
Heureusement, vous n'avez pas besoin de vérifier les codes d'erreur à chaque fois, car vous pouvez simplement utiliser l'outil d'aide à la décision. -s
(ou --report-identical-files
) interrupteur pour que diff soit plus verbeux :
$ diff -s test1.bin copyoftest1.bin
Files test1.bin and copyoftest1.bin are identical
Avec les options suivantes, Diff effectue une comparaison binaire pour vérifier si les fichiers sont différents ou s'ils sont identiques :
diff -qs {file1} {file2}
Si vous comparez deux fichiers portant le même nom et se trouvant dans des répertoires différents, vous pouvez utiliser ce formulaire à la place :
diff -qs {file1} --to-file={dir2}
OS X El Capitan
Utilisez la commande cmp. Se référer à Fichiers binaires et comparaison forcée de textes pour plus d'informations.
cmp -b file1 file2
Pour trouver les défauts de la mémoire flash, j'ai dû écrire ce script qui montre tous les blocs de 1K qui contiennent des différences (pas seulement le premier comme cmp -b
ne)
#!/bin/sh
f1=testinput.dat
f2=testoutput.dat
size=$(stat -c%s $f1)
i=0
while [ $i -lt $size ]; do
if ! r="`cmp -n 1024 -i $i -b $f1 $f2`"; then
printf "%8x: %s\n" $i "$r"
fi
i=$(expr $i + 1024)
done
Sortie :
2d400: testinput.dat testoutput.dat differ: byte 3, line 1 is 200 M-^@ 240 M-
2dc00: testinput.dat testoutput.dat differ: byte 8, line 1 is 327 M-W 127 W
4d000: testinput.dat testoutput.dat differ: byte 37, line 1 is 270 M-8 260 M-0
4d400: testinput.dat testoutput.dat differ: byte 19, line 1 is 46 & 44 $
Disclaimer : J'ai piraté le script en 5 min. Il ne supporte pas les arguments de ligne de commande ni les espaces dans les noms de fichiers.