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

14

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

    
por alexus 09.02.2010 / 16:18

7 respostas

19

No Linux:

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

No Windows: provavelmente seria melhor baixar e instalar o WinMerge, então

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

M

    
por 09.02.2010 / 16:40
2

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

    
por 20.06.2013 / 12:48
1

O Beyond Compare é uma boa ferramenta comercial, US $ 30 ou mais. Funciona sob o windows, tem uma versão eval. link

    
por 09.02.2010 / 17:36
0

No Windows, acredito que windiff faz isso, no entanto Winmerge é minha ferramenta de escolha para este trabalho. É open source e faz um ótimo trabalho ao comparar dois conjuntos de árvores de diretórios.

edit: oops, foi vencido por Marius

    
por 09.02.2010 / 17:40
0

O DiffMerge para Windows mostra diferenças, incluindo subpastas em uma janela. Há também uma versão portátil em algum lugar, mas uma pesquisa rápida revelou esse download: link

    
por 09.02.2010 / 17:42
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."} }
    
por 14.08.2014 / 03:42
0

O diff é normalmente usado para comparar dois arquivos, mas pode fazer muito mais do que isso. Em diff he as opções "r" e "q" fazem com que ele funcione de maneira recursiva e silenciosa, ou seja, apenas mencionando diferenças, que é exatamente o que estamos procurando:

diff -rq todo_orig/ todo_backup/

Se você também quiser ver diferenças para arquivos que podem não existir em nenhum diretório:

diff -Nrq dir1/ dir2/

Você pode também use Rsync e 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 exibidos nas listas.

Se você é fã de GUI, verifique Meld . Funciona bem tanto no Windows quanto no Linux.

    
por 27.11.2017 / 20:53