1 votes

Vérifier si deux répertoires ont le même contenu

J'ai l'habitude de nommer les fichiers avec des noms provisoires, puis de les renommer plus tard selon mes besoins.

Maintenant, j'ai deux répertoires du même nom dans des endroits différents avec la même taille et le même nombre de fichiers, mais les fichiers ont des noms différents.

Donc, ma question est de savoir comment savoir si ce répertoire est le même que celui-là ?

4voto

Si j'ai bien compris, j'ai trouvé cette solution : trouver uniquement les fichiers dans les deux répertoires, obtenir le hash md5 de chaque fichier, trier, et vérifier si les hashs correspondent.

En bash, vous pouvez obtenir tous les fichiers d'un répertoire (y compris les sous-répertoires) en utilisant find avec -type f pour obtenir uniquement les fichiers, et -exec md5sum {} \; pour obtenir les hachages MD5 des fichiers. De cette façon, vous devez couper les noms de fichiers et trier, en utilisant |cut -d\ -f1 y |sort pour trier les hachages générés. Utilisez ceci avec les deux répertoires, et poussez la sortie dans un fichier pour chaque répertoire :

find path/to/dir1 -type f -exec md5sum "{}" \; |cut -d\  -f1 |sort > /tmp/hashes_dir1
find path/to/dir2 -type f -exec md5sum "{}" \; |cut -d\  -f1 |sort > /tmp/hashes_dir2

Après cela, vous pouvez simplement comparer les fichiers générés :

diff /tmp/hashes_dir1 /tmp/hashes_dir2

Si la sortie de la commande ci-dessus est vide, les deux fichiers du répertoire ont le même contenu. Si ce n'est pas le cas (par exemple, il y a des fichiers dupliqués dans un seul répertoire), la sortie ne sera pas vide.

Edita: De plus, vous pouvez voir que les fichiers correspondants coupent le cut et le sort à partir des deux premières commandes, en poussant la sortie vers le même fichier, et en imprimant le fichier avec cat et un tuyau avec sort pour comparer :

find path/to/dir1 -type f -exec md5sum "{}" \; > /tmp/hashes_dir
find path/to/dir2 -type f -exec md5sum "{}" \; >> /tmp/hashes_dir
cat /tmp/hashes_dir |sort

Les fichiers correspondants apparaîtront l'un à côté de l'autre.

Edit2 : Pour voir comment ça marche : http://pastebin.com/dW7LrZkR

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X