Eu gostaria de encontrar um md5sum
(ou cálculo semelhante) de uma pasta sem compactá-la em um arquivo.
Por exemplo, se na pasta MyFolder
que tem os arquivos 1.txt
, 2.txt
e 3.txt
, contendo:
1.txt
O texto em 1.txt
2.txt
O texto em 2.txt
3.txt
O texto em 3.txt
Como posso calcular o valor md5sum
inteiro MyFolder
? Há algum caminho? Quero usar isso para verificar se duas pastas têm o mesmo conteúdo.
Isso pode ser útil para verificar se dois CDs ou pastas são iguais. Eu gostaria de uma maneira fácil de fazer isso.
files
checksum
verification
GarouDan
fonte
fonte
sudo apt-get install md5deep
md5deep -rel /path/to/your/directory/ > directory_hash.md5
md5deep -X directory_hash.md5 -r /path/to/your/second/direcotory
Thx muito.-o
opção para manipular tipos de arquivos.Se você não quiser arquivá-lo, talvez possa fazer algo assim
Pode ser necessário adaptar os
find
comandos para ser mais preciso.EDIT Você pode adicionar
-exec
à sua chamada de busca para comparar o conteúdo dos arquivos. Algo semelhante a isso:Lembre-se de que você pode adaptar isso.
fonte
Uma maneira de testar poderia ser gerar um md5sum com base na concatenação de todos os arquivos na pasta e suas subpastas. Lembre-se de que isso também requer que os arquivos tenham os mesmos nomes (pois devem estar na mesma ordem de classificação). O seguinte código deve funcionar:
Se você realmente se importa com os nomes de arquivos, etc, pode usar um loop para comparar o que está em
${_files_in_old_dir}
e${_files_in_new_dir}
. Isso deve funcionar na maioria dos casos (pelo menos verifica o número de arquivos no diretório e seus subdiretórios).fonte
globstar
. Qual é o erro?Percebi que a postagem original é bastante antiga, no entanto, acho que essas informações ainda podem ser valiosas para quem procura uma solução para verificar se os arquivos foram copiados corretamente. O Rsync pode ser o melhor método para copiar dados e as respostas fornecidas neste segmento são boas; no entanto, para aqueles que não são experientes no Linux, tentarei dar uma explicação mais detalhada.
Cenário: você acabou de copiar dados de um disco para outro, com muitos subdiretórios e arquivos. Você deseja verificar se todos os dados foram copiados corretamente.
Primeiro verifique se md5deep está instalado, emitindo o comando
md5deep -v
.Se você receber uma mensagem dizendo algo como 'comando não encontrado', instale o md5deep por
apt-get install md5deep
.Supõe-se que você deseja apenas lidar com arquivos regulares. Se você deseja lidar com outros tipos de arquivos, consulte o sinalizador -o no manual md5deep. (
man md5deep
)Agora você está pronto e assumimos que você copiou os arquivos de
/mnt/orginal
para/mnt/backup
, substitua-os pelos diretórios que estiver usando.Primeira alteração no diretório de origem, esta é a fonte original dos arquivos que você copiou ou fez backup:
cd /mnt/orginal
Em seguida, faça uma soma de verificação de cada arquivo:
md5deep -rel -o f . >> /tmp/checksums.md5
Este comando explicou:
-r
ativa o modo recursivo-e
exibe indicador de progresso-l
ativa caminhos de arquivo relativos.-o f
funciona apenas em arquivos regulares (não em dispositivos de bloco, pipes nomeados etc.).
informa ao md5deep para iniciar no diretório atual.>> /tmp/checksums.md5
diz ao md5deep para redirecionar toda a saída para/tmp/checksums.md5
.Observe que, se você deseja sobrescrever o conteúdo nas versões anteriores
/tmp/checksums.md5
, use>
e não>>
Observe que esse comando pode demorar um pouco, dependendo da velocidade io e do tamanho dos dados. Você pode experimentar o nice e / ou ionice para aumentar o desempenho do md5deep, mas isso está fora do escopo desta resposta.
Quando a criação das somas de verificação estiver concluída, você terá um arquivo com entradas semelhantes a:
A primeira coluna é a soma de verificação do md5 e a segunda coluna é o caminho relativo para o arquivo ao qual a soma de verificação pertence.
Se você deseja ver quantos arquivos existem no arquivo de soma de verificação, emita o comando:
wc /tmp/checksums.md5 -l
Agora, você deseja verificar se os dados copiados estão corretos:
cd /mnt/backup
md5deep -o f -reX /tmp/checksums.md5 . >> /tmp/compare.result
A única diferença de quando criamos as somas de verificação é -X, que exibe o hash atual de um arquivo se a entrada no arquivo checksums.md5 não corresponder. Portanto, no final do teste, se
/tmp/compare.result
estiver em branco, você poderá confiar que todos os arquivos serão copiados corretamente, pois as somas de verificação correspondem.Observe que apenas os arquivos listados no
/tmp/checksums.md5
arquivo serão verificados quanto a uma soma de verificação correta; se houver algum arquivo adicional no/mnt/backup
diretório, o md5deep não notificará você sobre eles.Notas:
Você não precisa necessariamente usar o redirecionamento para armazenar arquivos de saída. Consulte o manual do md5deep para obter mais informações.
Pode ser necessário executar os comandos md5deep como root, dependendo das permissões dos arquivos que você está manipulando.
fonte
Se você deseja verificar recursivamente as diferenças entre dois diretórios
/path1
e/path2
sem usarmd5deep
:Explicação:
path1
para fazer todas as linhas impressas porfind
serem relativas apath1
(cd /path1
)&& find . -type f
)find
como entrada paramd5
(| xargs md5
)A saída ficará assim se houver alguma diferença:
fonte