A ferramenta que você está procurando é rdiff . Funciona como combinar rsync e diff. Ele cria um arquivo de patch que você pode comparar ou distribuir.
Qual é a melhor maneira de comparar estruturas de diretórios?
Eu tenho um utilitário de backup que usa rsync . Eu quero dizer as diferenças exatas (em termos de tamanhos de arquivo e datas da última alteração) entre a fonte 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 que a ferramenta pode ser pronta ou uma ideia para um script python.
Muito obrigado!
Udi
A ferramenta que você está procurando é rdiff . Funciona como combinar rsync e diff. Ele cria um arquivo de patch que você pode comparar ou distribuir.
Experimente o Beyond Compare 3 ( Scooter Software ) que tem versões para Windows e Linux. Depois de usá-lo, você provavelmente não desejará usar qualquer outra ferramenta de comparação de arquivos.
Algumas pessoas querem comparar sistemas de arquivos por diferentes razões, então vou escrever aqui o que eu queria e como eu fiz isso.
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 os binários padrão do sistema. A comparação com base no conteúdo pode ser feita passando o parâmetro find
an -exec
que ecoou o caminho do arquivo e um MD5 depois disso.
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 com a mesma facilidade que encontrar em um loop for. E, também, você pode aumentar a saída do diff, então ele diz coisas como "este arquivo está no host1 mas não no host2" ou algo assim, mas nesse momento você pode simplesmente instalar as ferramentas que todo mundo está falando ...
Eu usei dirdiff no passado para comparar as estruturas de diretórios. Ele só funciona em dirs locais, então você terá que sshfs
-mount seus outros diretórios.
O bom é que você pode ver visualmente se os arquivos são iguais ou não e quais são mais novos ou mais antigos. E suporta até 5 diretórios. Você também pode ver as diferenças e copiar arquivos de um para o outro.
Da página do manual do rsync:
-n, --dry-run
This makes rsync perform a trial run that doesn’t make any changes (and produces mostly
the same output as a real run). It is most commonly used in combination with the -v,
--verbose and/or -i, --itemize-changes options to see what an rsync command is going to
do before one actually runs it.
Pode ser que isso ajude.
Eu usaria o Meld para isso.
Além das ferramentas já mencionadas no Windows, você pode usar o Total Commander ou o WinSCP, ambos têm funções muito confortáveis para comparar (e sincronizar) diretórios.
diff -r
realmente funciona muito bem. Se você quer apenas saber se os arquivos diferem, não o conteúdo real das diferenças, faça diff -qr