Como comparar dois diretórios (incluindo subdiretórios) quanto a diferenças?

14

Como posso comparar dois diretórios com subdiretórios para ver onde está a diferença?

alexus
fonte
6
Sistema operacional, por favor.
Maximus Minimus
Você quer saber se existem arquivos diferentes entre os dois diretórios ou se o conteúdo dos arquivos é diferente?
Matt Simmons

Respostas:

20

No Linux:

$ diff -r /first/directory /second/directory

No Windows: é melhor baixar e instalar o WinMerge e, em seguida,

> WinMerge /r c:\first\folder c:\second\folder

M

MariusPontmercy
fonte
3
Eu uso diff -qrl agora ...
alexus
1
Existe uma opção na GUI para especificar a opção / r sem usar o prompt de comando?
Omtara
@ Omtara, depois de iniciar o WinMerge, escolha Arquivo - Abrir. Na caixa de diálogo aberta, marque // Incluir subpastas //. Se você abrir o WinMerge selecionando duas pastas no Windows Explorer, configure a integração do Shell. Abrir Edição - Opções; navegue até Categoria // Integração do shell e marque // Incluir subpastas por padrão //.
R. Schreurs
2

Eu usei o meld no Ubuntu - ele tem uma boa opção de comparação de diretórios.

DNayak
fonte
+1 para meld, normalmente eu gosto de opções de linha de comando como diff, mas ser capaz de visualizar visualmente as diferentes pastas de dois diretórios diferentes de uma maneira visual é muito útil. Tanto o meld quanto o diff ainda funcionam bem no Ubuntu 16.04 e no Ubuntu 18.04 para outras pessoas que encontrarem isso em 2018. Claro que no Windows, o WinMerge é uma ótima opção. Ouvi o Meld funcionar no Windows, mas ainda não o experimentei pessoalmente.
22418 Ken
1

No Windows, acredito que o Windiff faz isso, mas o Winmerge é a minha ferramenta de escolha para este trabalho. É de código aberto e faz um trabalho muito interessante de comparar dois conjuntos de árvores de diretório.

edit: oops, foi derrotado por Marius

Bryan
fonte
1

Diff é normalmente usado para comparar dois arquivos, mas pode fazer muito mais do que isso. Nas diffopções "r" e "q", o trabalho é recursivo e silencioso, ou seja, apenas mencionando diferenças, que é exatamente o que estamos procurando:

diff -rq todo_orig/ todo_backup/

Se você também deseja ver diferenças nos arquivos que podem não existir nos dois diretórios:

diff -Nrq dir1/ dir2/

Você também pode usar Rsynce find. Para find:

find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER

Mas arquivos com os mesmos nomes e nas mesmas subpastas, mas com conteúdo diferente, não serão mostrados nas listas.

Se você é fã de GUI, pode verificar Meld . Funciona bem no Windows e no Linux.

Fábio
fonte
0

Eu escrevi isso usando o cmdlet Compare-Objects no Powershell:

#set the directories 
$firstdirectory = Read-Host "What is the first directory you wish to compare?" $seconddirectory = Read-Host "What is the second directory you wish to compare?"

#Check if the user wants to compare subdirectories 
$recursivesearch = Read-Host "Do you wish to compare subdirectories? Please enter yes or no." If ($recursivesearch -eq "yes") 

#get the contents 
{ $firstdirectorycontents = @(Get-ChildItem $firstdirectory -Recurse) $seconddirectorycontents = @(Get-ChildItem $seconddirectory -Recurse ) }

    else { $firstdirectorycontents = @(Get-ChildItem $firstdirectory) $seconddirectorycontents = @(Get-ChildItem $seconddirectory) }
    #compare the objects and handle errors 
if ($firstdirectorycontents.Count -eq 0 )
        {
        Write-Host "No files were found in the first directory, the directories cannot be compared."
        }
        elseif ($seconddirectorycontents.Count -eq 0)
        {
        Write-Host "No files were found in the second directory, the directories cannot be compared."
        }
        else
        {   
        try 
            {
            Compare-Object -ReferenceObject $firstdirectorycontents -DifferenceObject $seconddirectorycontents 
            }

        catch {"Another error occured."} }
Davidw
fonte