
eu encontrei deesta postagem no Stackoverflow, se você quiser apenas obter uma lista de arquivos correspondentes cujo conteúdo é diferente, poderá executar:
diff --brief --recursive dir1/ dir2/
... e tentando fazer isso sozinho, isso fornece uma pequena lista de arquivos cujo conteúdo é diferente.
Mas se eu fiz um backup de um sistema de arquivos original (suponha sistemas de arquivos GRANDES, 2 TB, por exemplo), e queria verificar se o backup é igual ao original (por exemplo, quero verificar se o backup foi bem-sucedido), o que devo executar, se estiver interessado apenas em quais arquivos NÃO estão disponíveis em nenhum dos lados? Quero algo que verifique as árvores de diretórios RÁPIDO (sem verificar o conteúdo).
Embora a comparação do tamanho do arquivo não forneça uma indicação absoluta sobre se o arquivo de backup é diferente, comparar esse e outros metadados que não sejam de conteúdo de arquivo durante o comando de comparação ajudaria.
(Peço desculpas por repassar uma pergunta muito semelhante, mas notei um usuário argumentando que a pergunta talvez estivesse fora do assunto, então essa pergunta definitivamente estaria no stackoverflow.)
Alguma experiência sobre isso?
Responder1
Uma solução não rsync que verifica o horário da modificação e o tamanho do arquivo:
diff <(find dir1 -mindepth 1 -printf '%P %t %s\n' | sort) <(find dir2 -mindepth 1 -printf '%P %t %s\n' | sort) | grep -E '^[<>]'
Exemplo de saída:
> bar Sat Sep 14 11:52:33.0544384394 2013 91
< foo Fri Sep 13 17:58:21.0213671425 2013 445
> foo Sun Sep 8 23:01:02.0355432619 2013 347
Mostra que foo
foi modificado dir1
e bar
só existe em dir2
.
Responder2
Você não nos diz qual solução de backup usa, mas quase todos os programas de backup reais têm um modo de “verificação”. (Uma ferramenta de backup "real" neste contexto é algo como o Bacula, software projetado expressamente para backup e restauração).
Todas as outras coisas sendo iguais, eu sugeriria usar um software de backup real e suas ferramentas de verificação integradas.
Todas as outras coisas NÃO sendo iguais, rsync -nav --delete <backup> <original>
seria minha sugestão.
Essefazverifique o conteúdo e informará sobre arquivos extras, arquivos diferentes e arquivos ausentes. Não é tão profundo (lento) quanto um diff
, e isso -n
significa que não afetará realmente o sistema de arquivos.
Responder3
Resultante das respostas acima, criei o seguinte pequeno roteiro, que gostaria de compartilhar:
# vi /bin/checkbackup
#!/bin/bash
echo "1/5: Checking source files..."
find "$1" -type f -printf "%P %s\n" | sort > ~/.checkbackup_files.tmp
echo "2/5: Comparing destination files..."
find "$2" -type f -printf "%P %s\n" | sort | diff - ~/.checkbackup_files.tmp
echo "3/5: Checking source directories..."
find "$1" -type d -printf "%P\n" | sort > ~/.checkbackup_dirs.tmp
echo "4/5: Comparing destination directories..."
find "$2" -type d -printf "%P\n" | sort | diff - ~/.checkbackup_dirs.tmp
echo "5/5: Cleaning up"
rm -f ~/.checkbackup_files.tmp
rm -f ~/.checkbackup_dirs.tmp
# chmod 755 /bin/checkbackup
Uso:
$ checkbackup /path/to/dir1 /path/to/dir2
Nenhum relatório significa que a estrutura e os nomes das pastas são iguais e que os arquivos têm os mesmos tamanhos e nomes, sem falta alguma.
Testado em árvores de diretório de 1,5 TB em discos SATA2 5400rpm, termina em aproximadamente 5 minutos.
Este script não está de forma alguma concluído, sem dúvida existem outros, melhores, mais rápidos e mais aprofundados com mais ferramentas de verificação por aí. Mas pensei em compartilhar de qualquer maneira.