Como comparar diferenças entre diretórios (linux)

22

Eu tenho dois diretórios - um de backup anterior e segundo do backup mais recente. Como faço para comparar quais alterações foram feitas nos arquivos no diretório do backup mais recente no Linux? Além disso, como faço para exibir as alterações, por exemplo, arquivos de texto e php - estou pensando em algo como o histórico de revisão na wikipedia onde você vê a versão antiga em um lado da tela e a versão mais recente em outro e as alterações são realçadas. Como faço para conseguir algo assim?

edite: Como faço para comparar também o diretório remote com o local?

    
por Phil 26.08.2009 / 18:17

6 respostas

33

Da página man do diff:

If both from-file and to-file are directories, diff compares corresponding files in both directories, in alphabetical order; this comparison is not recursive unless the -r or --recursive option is given. diff never compares the actual contents of a directory as if it were a file. The file that is fully specified may not be standard input, because standard input is nameless and the notion of ‘‘file with the same name’’ does not apply.

Então, para comparar diretórios: diff --brief -r dir1 dir2

Para comparar arquivos lado a lado: diff --side-by-side file1 file2

    
por 26.08.2009 / 18:27
3

Assumindo:

  • estamos em www1 , comparando com o www2 remoto
  • há autenticação de chave pública do local www1 para o remoto www2
  • comparamos como o mesmo usuário no local www1 e remoto www2
find /var/www/html/ -name "*" -exec md5sum -b {} \; | grep -v "/var/www/html/exclude_this dir" > local.md5
ssh www2 "find /var/www/html/ -name '*' -exec md5sum -b {} \; | grep -v /var/www/html/exclude_this dir > remote.md5"
scp www2:remote.md5 .
diff local.md5 remote.md5 
    
por 03.02.2011 / 16:56
3

Você realmente deseja combinar o poder de rsync para reduzir o consumo de largura de banda com o poder de diff , para oferecer flexibilidade e bom desempenho.

Então, algo assim:

cp -R $local $bak
rsync $server:$remdir/* $local/
rsync $local/ $server:$remdir/* 
diff -wur $local $bak

Eu acho que você poderia ajustar isso um pouco se você estivesse usando frequentemente rsync em vez de cp na primeira linha - obviamente na última linha você tem o poder total de diff para formatá-lo. gostar. Provavelmente com y no caso dos OPs

A desvantagem desta abordagem é que você acaba usando o dobro de espaço local, mas com menos de $ 1 / gig que se importa?

    
por 08.09.2012 / 23:21
1

Faça diff old_dir new_dir > diff.txt para diferenças lado a lado no mesmo servidor.

Para arquivos remotos:

Por exemplo: ABC é um servidor existente e XYZ é seu servidor remoto e o nome do diretório é 123.

Passo 1: Renomeie o diretório existente 123 no servidor ABC como 123_ABC.

ABC:/Home > mv 123 123_ABC

Etapa 2: crie um novo diretório no servidor ABC:

ABC: > mkdir 123_XYZ

Etapa 3: Copie todos os arquivos do diretório 123 no servidor XYZ para o diretório 123_XYZ no servidor ABC:

XYZ/123 > scp * userid@ABC: /123_XYZ

Isto irá copiar todos os arquivos do diretório no seu servidor XYZ para o seu diretório servidor / 123_XYZ ABC.

Etapa: 4: faça o diff entre os dois diretórios:

Agora vá para o servidor ABC e execute o diff entre 123_ABC e 123_XYZ

ABC > diff 123_ABC 123_XYZ > diff.txt

O comando acima salvará os resultados do diff em diff.txt no mesmo caminho.

Você pode comparar as diferenças então.

Obrigado,

Mehul

    
por 23.12.2013 / 18:42
0

AIDE O Advanced Detection Detection Environment (AIDE) é um verificador de integridade de arquivos para sistemas operacionais UNIX. Sua finalidade é fornecer relatórios sobre a integridade de dados em sistemas de arquivos suportados. Ao executar o AIDE várias vezes no host de destino, você pode determinar quais arquivos estão sendo alterados. Ao executar o AIDE várias vezes em hosts diferentes, você pode determinar quais arquivos e permissões são diferentes. Em seguida, use uma ferramenta de comparação de gui nos arquivos "diferentes" relatados.

Ou use uma ferramenta de gui diff como meld, guiffy, kdiff3, diff, vimdiff, gimimdiff, Emacs, Kompare, Difusa, Easydiff, TkDiff ou xxdiff. A maioria fará diffs de diretório além de diffs de arquivo. Você precisará montar o drive remoto usando NFS, SMBFS ou SSHFS como outros já mencionaram.

    
por 29.08.2009 / 09:24
0

Ou você pode usar dois arquivos com a lista de saída de arquivos. E então compare esses dois arquivos. Por exemplo:

/path/to/compare/remote$: ls > remote-files 

/path/to/compare/local$: ls > local-files 

Faça o download de um dos arquivos.

-rw-r--r-- 1 1015 1015    26624 2005-06-14 13:10 FILE.TXT  

para FILE.TXT

Use o diff ( diff -y remote-files local-files > diff-files ) para compará-los lado a lado. Abra os arquivos diff e confira. Cada linha com > significa um arquivo diferente.

    
por 07.04.2010 / 23:11