Calcular a soma de verificação MD5 de um diretório
29
Estou procurando uma maneira rápida de comparar o conteúdo do diretório. É possível fazer um md5sum (ou soma de verificação equivalente) de um diretório inteiro?
@Kibbee Para evitar isso, é necessário levar em consideração algo diferente do conteúdo dos dados de cada arquivo e exatamente como você faz a soma de verificação dos arquivos. Dado: [somas de verificação] 1. A (Diretório) - Arquivo1 [ABC] - Arquivo2 [CBA] 2. B (Diretório) - Arquivo1 [ABC] - B1 (Diretório) - Arquivo2 [CBA] 3. C (Diretório) - Arquivo4 [ABC] - Arquivo5 [CBA] 4. D (Diretório) - Cópia do arquivo1 [ABC] - Cópia do arquivo2 [CBA] Os diretórios A e B não são idênticos, embora contenham os mesmos arquivos (embora em B1 , o Arquivo2 esteja em um subdiretório) . No seu exemplo, A e C seriam considerados idênticos porque
Jacob Lyles
Respostas:
36
Certo - md5sum directory/*
Se você precisar de algo um pouco mais flexível (por exemplo, para recursão de diretório ou comparação de hash), tente md5deep.
apt-get install md5deep
md5deep -r directory
Para comparar uma estrutura de diretórios, você pode fornecer uma lista de hashes para comparar:
Não é o que eu quis dizer, mas o que eu queria :) Eu quis dizer recursivamente e obtendo UM hash no final, mas acho que isso pode ser feito com md5deep -l e com hash na saída.
baiacu
1
A ordem do hashing não é consistente, então teria que ordenar a saída antes de hashing
baiacu
1
Para obter uma ordem determinística, use o -j0que desativa o multithreading (consulte a página de manual).
Johann
1
@ ShaneMadden ♦ Eu instalei md5deepcom sudo apt-get install md5deepon Ubuntu 16.04mas quando tentei ler a página de homem ele me diz que> nenhuma entrada manual para md5deep
Kasun Siyambalapitiya
27
Se você gostaria de ver o que há de diferente (se houver) entre dois diretórios, o rsync seria uma boa opção.
a idéia é que você hash todos os arquivos cortem os hashes um por linha, classifique-os e o hash produzindo um único hash. isso não depende dos nomes dos arquivos.
Você pode criar somas MD5 de todos os arquivos, ordenar essas somas de verificação em ordem alfabética e tê-las (com ou sem novas linhas). Como o MD5 é criptográfico, deve funcionar bem com hashes de hashes.
Deve haver uma certa ordem para as coisas, caso contrário, você obterá resultados diferentes para dirs iguais.
E você deve considerar que a adição de algum arquivo para um dir vai mudar completamente o resultado, mesmo que fosse apenas um .directoryde .DS_Storearquivo.
Tecnicamente, pode-se obter o mesmo hash para diretórios diferentes. Se o diretório A tiver 2 arquivos com o conteúdo 'ab' e 'c' e o diretório B tiver 2 arquivos com o conteúdo 'a' e 'bc', o hash somente dos dados nos arquivos produzirá os mesmos resultados, mesmo que eles tenham arquivos com conteúdos diferentes. Eu nem tenho certeza de como alguém definiria o MD5Sum de um diretório.
Kibbee
1
Como um caso específico, digamos que você deseja copiar alguns arquivos do diretório1 para o diretório2 e, em seguida, verifique uma cópia bem-sucedida usando uma comparação md5.
Primeiro. cd para directory1 e digite:
find -type f -exec md5sum "{}" \; > ~/Desktop/md5sum.txt
que criará um arquivo de referência contendo uma soma md5 para cada arquivo no diretório1. Feito isso, tudo o que você precisa fazer é cd para directory2 e digite:
md5sum -c ~/Desktop/md5sum.txt
O programa md5sum busca cada caminho do arquivo md5sum.txt, calcula o md5sum desse arquivo na pasta de destino e o compara com a soma armazenada no arquivo.
Após a conclusão do processo, você obterá um resumo como 'Então, e tantos arquivos não corresponderam' ou algo parecido.
Eu precisava verificar a integridade dos backups / espelhos que contêm um grande número de arquivos e acabei escrevendo um programa de linha de comando chamado MassHash. Está escrito em Python. Um lançador GTK + também está disponível. Você pode conferir ...
Respostas:
Certo -
md5sum directory/*
Se você precisar de algo um pouco mais flexível (por exemplo, para recursão de diretório ou comparação de hash), tente md5deep.
Para comparar uma estrutura de diretórios, você pode fornecer uma lista de hashes para comparar:
Isso produzirá todos os arquivos no diretório2 que não correspondem ao diretório1.
Isso não mostra os arquivos que foram removidos do diretório1 ou os arquivos que foram adicionados ao diretório2.
fonte
-j0
que desativa o multithreading (consulte a página de manual).md5deep
comsudo apt-get install md5deep
onUbuntu 16.04
mas quando tentei ler a página de homem ele me diz que> nenhuma entrada manual para md5deepSe você gostaria de ver o que há de diferente (se houver) entre dois diretórios, o rsync seria uma boa opção.
Isso listará todos os arquivos diferentes.
fonte
diff -qr /source/directory/ /destination/directory/
também mostraria arquivos que diferem.username@hostname:/destination/directory
Eu acho que respondi a este antes com esta resposta:
dá:
b1a5b654afee985d5daccd42d41e19b2877d66b1
a idéia é que você hash todos os arquivos cortem os hashes um por linha, classifique-os e o hash produzindo um único hash. isso não depende dos nomes dos arquivos.
fonte
O aplicativo cfv é bastante útil, não apenas pode verificar e criar somas de verificação MD5, mas também pode fazer CRC32, sha1, torrent, par, par2.
para criar um arquivo de soma de verificação CRC32 para todos os arquivos no diretório atual:
para criar um arquivo de soma de verificação MD5 para todos os arquivos no diretório atual:
Para criar um arquivo de soma de verificação separado para cada subdiretório:
Para criar um arquivo "super" de soma de verificação contendo arquivos em todos os subdiretórios:
fonte
Eu usei o hashdeep, conforme explicado nesta resposta do askubuntu: Verifique a correção dos arquivos copiados :
Para calcular as somas de verificação:
Para verificar e listar as diferenças:
Isso tem uma vantagem sobre o md5deep, pois ele mostra arquivos renomeados (movidos), adicionados e removidos, além de evitar o problema com arquivos de tamanho 0, apontados na parte inferior de http://www.meridiandiscovery.com/how- para / validating-copy-results-using-md5deep .
fonte
Isso funcionou para mim: (execute-o no diretório em que você está interessado)
fonte
Você pode criar somas MD5 de todos os arquivos, ordenar essas somas de verificação em ordem alfabética e tê-las (com ou sem novas linhas). Como o MD5 é criptográfico, deve funcionar bem com hashes de hashes.
Deve haver uma certa ordem para as coisas, caso contrário, você obterá resultados diferentes para dirs iguais.
E você deve considerar que a adição de algum arquivo para um dir vai mudar completamente o resultado, mesmo que fosse apenas um
.directory
de.DS_Store
arquivo.fonte
Como um caso específico, digamos que você deseja copiar alguns arquivos do diretório1 para o diretório2 e, em seguida, verifique uma cópia bem-sucedida usando uma comparação md5.
Primeiro. cd para directory1 e digite:
que criará um arquivo de referência contendo uma soma md5 para cada arquivo no diretório1. Feito isso, tudo o que você precisa fazer é cd para directory2 e digite:
O programa md5sum busca cada caminho do arquivo md5sum.txt, calcula o md5sum desse arquivo na pasta de destino e o compara com a soma armazenada no arquivo.
Após a conclusão do processo, você obterá um resumo como 'Então, e tantos arquivos não corresponderam' ou algo parecido.
fonte
Eu precisava verificar a integridade dos backups / espelhos que contêm um grande número de arquivos e acabei escrevendo um programa de linha de comando chamado MassHash. Está escrito em Python. Um lançador GTK + também está disponível. Você pode conferir ...
http://code.google.com/p/masshash/
fonte