Melhor maneira de comparar (diff) uma estrutura de diretórios completa?

29

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

    
por Adam Matan 12.07.2009 / 12:55

9 respostas

18

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.

    
por 12.07.2009 / 13:22
9

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.

    
por 12.07.2009 / 13:48
9

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.

Eu queria:

  • Para comparar o mesmo sistema de arquivos com ele mesmo, ou seja, snapshot , faça alterações , snapshot , compare .
  • Uma lista de quais arquivos foram adicionados ou removidos, não se importou com alterações no arquivo interno.

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 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.

    
por 19.06.2012 / 02:11
8

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 ...

    
por 12.07.2009 / 15:17
5

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.

    
por 12.07.2009 / 14:00
4

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.

    
por 12.07.2009 / 13:04
3

Eu usaria o Meld para isso.

    
por 12.07.2009 / 15:18
2

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.

    
por 08.04.2010 / 08:53
2

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

    
por 22.07.2014 / 18:33