Ok, aqui está minha primeira tentativa de algo. Parece funcionar moderadamente bem para o que eu preciso, mas estou aberto a sugestões melhores:
Primeiro, obtenha md5sums de todos os arquivos em nosso sistema de arquivos e nos novos dados:
find /location/of/data -type f -exec md5sum {} ';' > our.md5sums
find /media/newdisk -type f -exec md5sum {} ';' > their.md5sums
E eu escrevi um pequeno script python chamado md5diff.py:
#!/usr/bin/env python
import sys
print "Comparing", sys.argv[1], "to", sys.argv[2]
# Create a dictionary based upon the hashes in source B
dict = {}
for line in open(sys.argv[2]):
p = line.partition(' ')
dict[p[0]] = p[2].strip()
# Now go through source A and report where the file is in source B
for line in open(sys.argv[1]):
p = line.partition(' ')
if p[0] in dict:
print line.strip(), "(", sys.argv[2], ":",dict[p[0]], ")"
else:
print line.strip(), "NOT IN", sys.argv[2]
Então, agora eu posso usar
./md5diff.py their.md5sums our.md5sums
E se eu adicionar um | grep "NOT IN"
, ele listará apenas os arquivos em sua mídia que ainda não temos (ou é diferente do que temos). Eu posso começar a atacar manualmente as diferenças conhecidas.