Verifique se dois dirs têm o mesmo conteúdo

1

Eu geralmente nomeio arquivos com alguns nomes temporários e depois renomeio o nome que eu preciso.

Agora eu tenho dois dirs de mesmo nome em locais diferentes com o mesmo tamanho e número de arquivos, mas os arquivos são de nomes diferentes.

Então, minha pergunta é como saber se esse diretório é o mesmo desse diretório?

    
por Maythux 17.06.2015 / 17:02

1 resposta

4

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

    
por Danilo de Andrade Mendes 17.06.2015 / 17:38