Come confrontare due directory (comprese le directory secondarie) per le differenze?


14

Come posso confrontare due directory con le directory secondarie per vedere dov'è la differenza?


6
Sistema operativo per favore.
Maximus Minimus,

Vuoi sapere se ci sono file diversi tra le due directory o se il contenuto dei file è diverso?
Matt Simmons,

Risposte:


20

Sotto Linux:

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

Sotto Windows: probabilmente faresti meglio a scaricare e installare WinMerge

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

M


3
Uso diff -qrl ora ...
alexus,

1
Esiste un'opzione nella GUI per specificare l'opzione / r senza usare il prompt dei comandi?
Omtara,

@Omtara, dopo aver avviato WinMerge, selezionare File - Apri. Nella finestra di dialogo aperta, selezionare // Includi sottocartelle //. Se si apre WinMerge selezionando due cartelle in Esplora risorse, configurare l'integrazione Shell. Apri Modifica - Opzioni; passare a Categoria // Shell Integration e selezionare // Includi sottocartelle per impostazione predefinita //.
R. Schreurs,

2

Ho usato la fusione su Ubuntu - ha una buona opzione di confronto delle directory.


+1 per la combinazione, normalmente mi piacciono le opzioni della riga di comando come diff, ma essere in grado di vedere visivamente le diverse cartelle effettive di due diverse directory a colpo d'occhio in un modo così visivo è molto utile. Sia la fusione che la diff funzionano ancora bene su Ubuntu 16.04 e Ubuntu 18.04 per chiunque lo trovi nel 2018. Naturalmente su Windows, WinMerge è un'ottima opzione. Ho sentito che Meld funziona su Windows ma non l'ho ancora provato personalmente.
Ken,


1

Su Windows, credo che Windiff lo faccia, tuttavia Winmerge è il mio strumento preferito per questo lavoro. È open source e fa un ottimo lavoro nel confrontare due set di alberi di directory.

edit: oops, è stato picchiato da Marius


1

Diff viene normalmente utilizzato per confrontare due file, ma può fare molto di più. Nelle diffopzioni "r" e "q" lo fanno funzionare in modo ricorsivo e silenzioso, cioè menzionando solo le differenze, che è proprio quello che stiamo cercando:

diff -rq todo_orig/ todo_backup/

Se vuoi anche vedere le differenze per i file che potrebbero non esistere in entrambe le directory:

diff -Nrq dir1/ dir2/

Puoi anche usare Rsynce find. Per find:

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

Ma i file con gli stessi nomi e nelle stesse sottocartelle, ma con contenuti diversi, non verranno visualizzati negli elenchi.

Se sei un fan della GUI, puoi selezionare Combina . Funziona bene su Windows e Linux.



0

L'ho scritto usando il cmdlet Compare-Objects in 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."} }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.