Vérifier que deux fichiers sont identiques avec le terminal
Voici un nouveau tutoriel sur l'utilisation d'une application en ligne de commande. Aujourd'hui, nul besoin d'aller chercher dans Homebrew pour trouver notre sujet du jour. macOS dispose, d'origine, d'un petit panel d'outils, et c'est l'un d'entre eux que nous allons étudier dans ce guide.
Pour vérifier rapidement que deux fichiers sont identiques, on va d'abord comparer leurs poids et leurs types. Mais si tout concorde, comment être sûr que les deux fichiers sont réellement identiques ?
Nous pourrions ouvrir les deux fichiers dans un éditeur de texte, et comparer les caractères un à un. Mais cela pourrait être long et extrèmement fastidieux. Heureusement, il existe une application en ligne de commande qui fait cela : cmp.
Son fonctionnement est simple, il suffit d'appeler l'application, avec les deux fichiers en paramètres.
cmp chemin/vers/fichier1 chemin/vers/fichier2
L'application va comparer les deux fichiers byte par byte, et s'arrêter dès qu'elle trouve une différence, en l'indiquant dans le terminal, tel que
chemin/vers/fichier1 chemin/vers/fichier2 differ: char 1, line 1
Ici, les deux fichiers diffèrent dès le premier caractères.
Simple comme bonjour !
L'application est capable d'aller un peu plus loin, en ajoutant des options. Celle dont je me sers le plus est --silent ou -s. La commande peut être utilisée dans un script bash, sans que le terminal ne soit pollué par les résultats de tests intermédiaires tels que celui ci.
cmp -s chemin/vers/fichier1 chemin/vers/fichier2
Presque aussi utile, on retrouve l'option --bytes ou -n qui va limiter la comparaison à un certain nombre d'octets dans le fichier. Cette option est pratique lorsque l'on doit comparer de nombreux fichiers volumineux. En effet, plus le fichier est grand, plus le parcours réalisé par l'application est long. Lorsque l'on multiplie avec un certain nombre de fichiers, cela peut prendre un certain délai. Avec cette option, nous limitons la comparaison et considérons (peut être à tort) qu'à partir de x caractères, les fichiers sont identiques. Pour comparer les 20 premiers méga-octets
cmp -n 20971520 chemin/vers/fichier1 chemin/vers/fichier2
Dernière option qui peut s'avérer pratique, il est possible de passer quelques caractères, avec -i, ou dans sa version (très) longue --ignore-initial avant de commencer la comparaison. Les premiers octets sont l'en-tête du fichier, et malgré un contenu identique, des fichiers peuvent avoir une entête différent, et seront donc indiqués comme différents. Il est possible d'indiquer une valeur, qui sera identique pour les fichiers, ici le premier kilo-octet
cmp -i 1024 chemin/vers/fichier1 chemin/vers/fichier2
ou des valeurs différentes pour les deux fichiers
cmp -i 512:1024 chemin/vers/fichier1 chemin/vers/fichier2