Ferramenta de comparação de arquivos e diretórios?

149

Estou procurando algo que compare diretórios e arquivos como o Beyond Compare faz para o Windows.

É principalmente para uso do controle de origem, mas eu preciso usá-lo também para implantação.

DevelopingChris
fonte
Deseja apenas a lista de arquivos ou o conteúdo real de cada arquivo?
Martin Ueding
Quero a lista de arquivos e, se possível, os diferentes conteúdos entre arquivos com o mesmo caminho.
Isoman
2
Seria útil se a ferramenta GUI permitir ocultar pastas e arquivos idênticos . Isso tornaria muito mais fácil se concentrar nas pastas e arquivos ímpares. Alguém conhece uma ferramenta que suporte esse recurso?
JJD
Dê uma olhada no uníssono . Além da comparação, a abordagem "balcão único faz tudo", enquanto o uníssono se concentra em lidar com a travessia de árvores, mantendo o estado e a propagação de alterações, cobrindo os recursos do Beyond Compare delegando coisas como diff, mesclagem de 3 vias, etc. programa favorito que trabalha no nível do arquivo. O Unison é um software gratuito, muito robusto e maduro, pode detectar e sincronizar rapidamente árvores enormes, através da rede entre diferentes sistemas operacionais, etc. Leia o documento primeiro, especialmente no Windows.
Stéphane Gourichon
O emacs tem uma ferramenta de comparação de diretórios. Como tudo o que é emacs, o colírio para os olhos é, bem, "o que colírio para os olhos significa?", Mas mostra ajuda contextual com as teclas, permite com algumas teclas a análise recursiva, oculta arquivos idênticos ou até subdiretórios, escolhe arquivos interativos para mostrar cores diferenças codificadas com várias opções, mesclam interativamente, propagam ou executam edições arbitrárias em arquivos, vão facilmente para o próximo arquivo ou diretório, mantendo o controle do estado, com todos os recursos de edição habituais.
Stéphane Gourichon

Respostas:

175

Meldinstalar fusão

O Meld é uma ferramenta que pode comparar e mesclar arquivos e diretórios. É uma interface gráfica do usuário para as ferramentas padrão diff instalar diffutilse de patch instalar patchlinha de comando. (Veja man diff e man patch para mais detalhes)

insira a descrição da imagem aqui

Além disso, muitos sistemas de controle de origem (como bzr instale o bzr-gtkou git instalar git) têm a capacidade de criar diferenças entre versões.

dv3500ea
fonte
2
Meld é incrível. Eu uso-o como meu diff de controle de origem.
Matt Joiner
12
Acabei de experimentar em uma pasta maior - 4 GB, 2000 arquivos. A funcionalidade da fusão é a desejada. Mas para essa pasta, o meld é extremamente lento e a interface do usuário não responde (bloqueia). Usando o rsync agora.
GeekQ
1
Também funciona muito bem na comparação de arquivos de texto lado a lado ou até mesmo copiar material de colagem. Melhor interface que eu já vi!
Stefan Rogin
@geekQ como uma alternativa rápida, capaz de lidar com uma pasta tão grande quanto você desejar instantaneamente, veja beyond compareabaixo. superior ao fundir imho
phil294
Meld cai toda vez que eu quiser selecionar uma pasta: / Eu tenho a versão mais recente availabe no meu repositório de distribuição (Ubuntu 14.04)
Youda008
44

Diff é seu amigo.

diff -ur path1 path2

Isso irá comparar todos os arquivos comuns entre o caminho1 e o caminho2.

Se você mudar -urpara -urN, também mostrará o conteúdo dos arquivos que estão presentes apenas em um dos caminhos.

Richm
fonte
1
Instalado colordiffe usadocolordiff -ur path1 path2
warvariuc 6/11/14
Não funciona no cygwin.
Tomáš Zato 16/10
22

O 'Beyond Compare' também está disponível para Linux.

Verifique o URL de download: http://www.scootersoftware.com/download.php

aneeshep
fonte
O Beyond Compare é particularmente útil ao fazer um ssh (com chave ou senha) em um host remoto e compará-lo a uma cópia local.
Brianlmerritt 5/10
13

Use o diffcomando:

diff -u file1 file2

diff -useleciona um formato com algumas linhas de contexto. Uma planície diff file1 file2lista apenas as linhas diferentes. Há muito mais opções para controlar o formato de saída, ignorar diferenças somente de espaço em branco, etc.

Se você deseja gravar a saída em um arquivo, redirecione-o:

diff -u file1 file2 >file1-file2.diff
Gilles
fonte
12

Comandante Gnomoinstale o Gnome Commander

A interface pode não ser muito sexy, mas é extremamente poderosa!

texto alternativo

E se você estava acostumado a outro * Commander (como Norton ou similares), não ficará perdido.

Huygens
fonte
1
Não usei para comparar dois arquivos, mas usei para me dizer quais arquivos eram diferentes ao comparar com diretórios. Isto é especialmente útil quando classificando para fora fotografias ;-)
Huygens
10

Ferramentas de linha de comando

Inspirado por esta entrada do blog .

diff

Listando arquivos diferentes:

diff -qr folder1 folder2

Listando também o conteúdo:

diff -Naur folder1 folder2

rsync

Se os dois diretórios não estiverem na mesma máquina, rsynctalvez seja a solução mais fácil. Geralmente rsyncé usado para sincronizar diretórios, mas você pode executá-lo nos modos detalhado e seco, para listar apenas os arquivos que precisariam ser alterados.

rsync -rvnc --delete folder1 server:/path/to/folder2

Você pode omitir cse quiser comparar arquivos com base em carimbos de data e hora e tamanhos de arquivo para acelerar tudo:

rsync -rvn --delete folder1 server:/path/to/folder2
lumbric
fonte
9

Krusaderinstalar o krusader

O Krusader é uma ferramenta gratuita (disponível no Centro de Software) que mostra o conteúdo da pasta em comparação e você pode sincronizar com muitas opções diferentes. Você pode filtrar enquanto sincroniza e compara.

Krusader

Para comparar o conteúdo do arquivo, basta marcar dois arquivos, selecione "arquivo"> ​​"comparar conteúdo" e eles serão comparados letra por letra. a ferramenta de comparação padrão usada pelo krusader é a ferramenta padrão do KDE " Kompare ". Você pode configurar o krusader para usar qualquer outra ferramenta de comparação - como, por exemplo, uma das opções acima.

Esta é a solução mais completa que eu já encontrei e é muito conveniente. E suporta todas as teclas de função usadas pelo comandante da meia-noite (sintaxe do norton commander).

piedro
fonte
Você também pode usar "Ferramentas -> Sincronizar diretórios" para obter uma exibição de alterações nos arquivos recursivos dos dois painéis de diretório.
Angelos Pikoulas
infelizmente o sincronizador no krusader não é mantido: bugs.kde.org/show_bug.cgi?id=270150#c7 . Existe uma alternativa mantida ativamente?
rubo77
1
@ rubo77: esse bug foi corrigido enquanto isso.
mivk
9

KDiff3 instale o kdiff3

É um front-end gráfico para diferenciar os usuários do KDE (ou se você não se importa de usar os aplicativos Qt).

kdiff3

Também há dirdiff instalar dirdiff para diretórios.

estanhado
fonte
6

Talvez Meld seja o que você está procurando. Ou aqui estão algumas outras alternativas.

sagarchalise
fonte
4

O Unison é uma ferramenta rápida de sincronização de arquivos que usa o algoritmo rsync e permite visualizar diferenças antes de atualizar entre dois locais, sejam eles remotos ou locais.

Rog
fonte
4

Eu aprendi sobre haxixe duas semanas atrás. E tem algumas vantagens fortes:

  • Por outro lado meld, funciona bem para pastas muito grandes. Onde meldfica extremamente lento e a interface do usuário não responde (bloqueada), o hashdeep funciona a uma velocidade constante
  • Ao contrário rsync, o hashdeep detecta arquivos movidos - arquivos com o mesmo conteúdo, apenas em um diretório diferente.

Saída detalhada é como:

...
foo/bar.txt: Known file not used
x/foo/M0824_2L.JPG: Moved from y/P1010998.JPG

hashdeep: Audit failed
   Input files examined: 0
  Known files expecting: 0
          Files matched: 6233
Files partially matched: 0
            Files moved: 3695
        New files found: 19257
  Known files not found: 4713
geekQ
fonte
4

Uma boa maneira de fazer essa comparação é usar " find " com " md5sum " e depois um " diff ".

Exemplo:

Use find para listar todos os arquivos no diretório, calcule o hash md5 para cada arquivo e envie-o para um arquivo:

$find /dir1/ -type f -exec md5sum {} \; > dir1.txt

Execute o mesmo procedimento para o outro diretório:

$find /dir2/ -type f -exec md5sum {} \; > dir2.txt

Em seguida, compare o resultado dois arquivos com "diff":

$diff dir1.txt dir2.txt

Essa estratégia é muito útil quando os dois diretórios a serem comparados não estão na mesma máquina e você precisa garantir que os arquivos sejam iguais nos dois diretórios.

Outra boa maneira de fazer o trabalho é usar git

git diff --no-index dir1/ dir2/

Cumprimentos!

Adail Junior
fonte
3

Tente também FreeFileSync . Possui uma interface decente, velocidade de comparação aceitável, boa filtragem do resultado da comparação, diferentes formas de sincronização. Ele vem com uma ferramenta de monitoramento de pastas (RealTimeSync) que pode iniciar o FreeFileSync (na verdade, qualquer comando ou script) quando essa pasta (s) específica (s) ou os arquivos contidos são alterados. Realmente vale a pena tentar.

Mais informações sobre isso aqui ou aqui , onde você tem um PPA , também

Na página deles, os principais recursos:

Compare os arquivos (bytewise ou por data) e sincronize-os.

Sem limitações: um número arbitrário de arquivos pode ser sincronizado.

Suporte Unicode.

Suporte de rede.

Suporte interno para nomes de arquivos muito longos (mais de MAX_PATH = 260 caracteres).

Banco de dados de sincronização para propagação de arquivos excluídos e detecção de conflitos

Suporte para vários pares de pastas com configuração distinta

Suporte completo para links simbólicos do Windows / Linux e pontos de junção do Windows.

Interface do usuário enxuta e de fácil acesso: Altamente otimizada para velocidade e enormes conjuntos de dados.

Algoritmos codificados em C ++ completamente.

Todos os indicadores de progresso otimizados para desempenho máximo!

Crie trabalhos em lote para sincronização automatizada com ou sem GUI.

Foco na usabilidade:

Somente funcionalidade necessária na interface do usuário: sem menus sobrecarregados ou selva de ícones.

Selecione todas as pastas via arrastar e soltar.

A última configuração usada e as configurações de tela são salvas automaticamente.

Mantenha e carregue configurações diferentes arrastando e soltando, botão de carregamento ou linha de comando.

Clique duas vezes para iniciar o aplicativo externo (por exemplo, mostrar arquivo no Windows Explorer)

Copie e cole todos os dados da grade como texto

Exclua arquivos supérfluos / temporários diretamente na grade principal.

Clique com o botão direito do mouse no menu de contexto.

Informações abrangentes sobre status e relatórios de erros

Classifique as listas de arquivos por nome, tamanho ou data.

Suporte para tamanhos de arquivo maiores que 4 GB.

Opção para mover arquivos para a Lixeira em vez de excluí-los / substituí-los.

Ignore os diretórios "\ RECYCLER" e "\ System Volume Information" com o filtro padrão. (Apenas Windows)

Versões localizadas estão disponíveis para vários idiomas.

Excluir antes da cópia: evite a falta de espaço em disco para grandes trabalhos de sincronização.

Filtre a funcionalidade para incluir / excluir arquivos da sincronização (sem a necessidade de uma nova comparação!).

Incluir / excluir arquivos específicos da sincronização temporariamente.

Lide automaticamente com as alterações do horário de verão nos volumes FAT / FAT32.

Versão portátil disponível (selecionável via instalador).

Versão nativa de 64 bits.

Verifique se há atualizações no FreeFileSync automaticamente.

Copie arquivos bloqueados usando o Windows Volume Shadow Copy Service. (Apenas Windows)

Crie backups regulares com macros% time%,% date% nos nomes de diretório

Copie os tempos de criação / acesso / modificação de arquivos e pastas ao sincronizar

Estratégia avançada de bloqueio para permitir vários processos de sincronização (por exemplo, vários gravadores, o mesmo compartilhamento de rede)

Eu acrescentaria que ele pode gerenciar arquivos excluídos, movendo-os para o Lixo ou para uma pasta especificada pelo usuário. Para apontar uma desvantagem: a documentação do programa se concentra bastante no Windows, menos no Linux. Mas faz seu trabalho bem.

luri
fonte
3

Você pode usar difuso:

sudo apt-get install diffuse
diffuse file1 file2
metdos
fonte
2
Costumo usar Diffuse para um recurso matador - a capacidade de definir manualmente âncoras de mesclagem. Ainda não possui diretórios, mas para diferenças individuais e confusas, o recurso âncoras é incrível.
Sk606
2

Você pode tentar combinar .

São os repositórios e fornecem uma GUI para comparação de arquivos ou pastas.

Pavlos G.
fonte
1
Meld é uma GUI para diff, btw.
Marco Ceppi
1

O IDE Eclipse é um pouco pesado se você está apenas fazendo comparações, mas faz um bom trabalho nisso, entre outras coisas. Você pode selecionar 2 projetos, caminhos ou arquivos, compará-los entre si e também sincronizar com os servidores de controle de origem.

Rog
fonte
1

O IMHO FreeFileSync é muito bom e mais útil que o Meld. É rápido e estável, pode fazer sincronizações acessíveis e também pode exportar o resultado da comparação para um arquivo csv.

Link do Lanchpad

Reza
fonte
0

Recursos de plataforma cruzada, fáceis, sem problemas e com economia de perfil tornam o Jfilesync minha melhor escolha

nightcrawler
fonte
0

Para comparar arquivos

File_1.txt
Line1
Line2

File_2.txt
Line1
Line 2

Você pode usar o comando cmp:

cmp -b "File_1.txt" "File_2.txt"

saída seria

a b differ: byte 11, line 2 is  62 2  40  

Para comparar dirs (sua necessidade):

você pode usar o comando diff :

diff -r --brief dir1 dir2

man diff

  -r, --recursive
              recursively compare any subdirectories found

   -q, --brief
          report only when files differ
Maythux
fonte