Como eu entendi, eu encontrei essa solução: encontrar apenas arquivos em ambos os diretórios, obter o md5 hash de cada arquivo, classificar e verificar se os hashes coincidem.
No bash, você pode obter todos os arquivos de um diretório (incluindo subdiretórios) usando find com o parâmetro -type f
para obter apenas arquivos, e -exec md5sum {} \;
para obter os hashes MD5 dos arquivos. Dessa forma, você deve cortar os nomes dos arquivos e classificar, usando |cut -d\ -f1
e |sort
para classificar os hashes gerados. Use isso com ambos os dirs e empurre a saída para um arquivo para cada diretório:
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
Depois disso, você pode comparar os arquivos gerados:
diff /tmp/hashes_dir1 /tmp/hashes_dir2
Se a saída acima estiver vazia, os dois arquivos do diretório terão o mesmo conteúdo. Se não (por exemplo, há arquivos duplicados apenas em um diretório), a saída não estará vazia.
Editar:
Além disso, você pode ver os arquivos correspondentes cortando os tubos cut
e sort
dos dois primeiros comandos, empurrando a saída para o mesmo arquivo e imprimindo o arquivo com cat
e um canal com sort
para compare:
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
Os arquivos correspondentes aparecerão um ao lado do outro.
Edit2 : para ver como funciona: link