Qual é a melhor maneira de comparar estruturas de diretórios?
Eu tenho um utilitário de backup que usasincronizar novamente. Quero informar as diferenças exatas (em termos de tamanhos de arquivo e datas da última alteração) entre a origem e o backup.
Algo como:
Local file Remote file Compare
/home/udi/1.txt (date)(size) /home/udi/1.txt (date)(size) EQUAL
/home/udi/2.txt (date)(size) /home/udi/2.txt (date)(size) DIFFERENT
Claro, a ferramenta pode estar pronta ou ser uma ideia para um script python.
Muito obrigado!
Udi
Responder1
A ferramenta que você procura érdiff. Funciona como combinar rsync e diff. Ele cria um arquivo de patch que você pode comparar ou distribuir.
Responder2
Algumas pessoas querem comparar sistemas de arquivos por diferentes motivos, então vou escrever aqui o que queria e como fiz.
Eu queria:
- Para comparar omesmo sistema de arquivosconsigo mesmo, ou seja,instantâneo,faça mudanças,instantâneo,comparar.
- Uma lista de quais arquivos foram adicionados ou removidos, não se importava com alterações internas de arquivos.
O que eu fiz:
Primeiro instantâneo ( before.sh
script):
find / -xdev | sort > fs-before.txt
Segundo instantâneo ( after.sh
script):
find / -xdev | sort > fs-after.txt
Para compará-los ( diff.sh
script):
diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)'
A parte boa é que isso usa praticamente binários de sistema padrão. A comparação com base no conteúdo poderia ser feita passando find
um -exec
parâmetro que ecoasse o caminho do arquivo e um MD5 depois disso.
Responder3
se você não quiser instalar outra ferramenta ...
for host in host1 host2
do
ssh $host '
cd /dir &&
find . |
while
read line
do
ls -l "$line"
done ' | sort > /tmp/temp.$host.$$
done
diff /tmp/temp.*.$$ | less
echo "don't forget to clean up the temp files!"
E sim, isso poderia ser feito com find e exec ou find e xargs tão facilmente quanto find em um loop for. E, também, você pode aumentar a saída do diff para que ele diga coisas como "este arquivo está no host1, mas não no host2" ou algo assim, mas nesse ponto você pode simplesmente instalar as ferramentas das quais todo mundo está falando.
Responder4
diff -r
na verdade funciona muito bem. Se você quiser apenas saber se os arquivos são diferentes, e não o conteúdo real das diferenças, façadiff -qr