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