Wie vergleiche ich zwei Verzeichnisse (einschließlich Unterverzeichnisse) auf Unterschiede?

14

Wie kann ich zwei Verzeichnisse mit Unterverzeichnissen vergleichen, um festzustellen, wo der Unterschied liegt?

alexus
quelle
6
Betriebssystem bitte.
Maximus Minimus
Möchten Sie wissen, ob sich zwischen den beiden Verzeichnissen unterschiedliche Dateien befinden oder ob sich der Inhalt der Dateien unterscheidet?
Matt Simmons

Antworten:

20

Unter Linux:

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

Unter Windows: Dann sollten Sie WinMerge wahrscheinlich besser herunterladen und installieren

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

M

MariusPontmercy
quelle
3
Ich benutze jetzt diff -qrl ...
Alexus
1
Gibt es eine Option in der GUI, um die Option / r anzugeben, ohne die Eingabeaufforderung zu verwenden?
Omtara
@Omtara, nachdem Sie WinMerge gestartet haben, wählen Sie "Datei - Öffnen". Aktivieren Sie im geöffneten Dialogfeld // Unterordner einbeziehen //. Wenn Sie WinMerge öffnen, indem Sie im Windows-Explorer zwei Ordner auswählen, konfigurieren Sie die Shell-Integration. Öffnen Sie Bearbeiten - Optionen. Navigieren Sie zu Kategorie // Shell-Integration und aktivieren Sie // Standardmäßig Unterordner einbeziehen //.
R. Schreurs
2

Ich habe meld auf Ubuntu verwendet - es hat eine gute Verzeichnisvergleichsoption.

DNayak
quelle
+1 für meld, normalerweise mag ich Befehlszeilenoptionen wie diff, aber es ist sehr nützlich, die tatsächlichen unterschiedlichen Ordner zweier unterschiedlicher Verzeichnisse auf einen Blick so visuell zu sehen. Sowohl meld als auch diff funktionieren unter Ubuntu 16.04 und Ubuntu 18.04 einwandfrei, falls jemand dies im Jahr 2018 findet. Natürlich ist WinMerge unter Windows eine großartige Option. Ich habe gehört, dass Meld unter Windows funktioniert, habe es aber noch nicht persönlich ausprobiert.
Ken
1

Ich glaube, dass es windiff unter Windows macht, aber Winmerge ist das Werkzeug meiner Wahl für diesen Job. Es ist Open Source und macht einen sehr guten Job beim Vergleichen von zwei Gruppen von Verzeichnisbäumen.

edit: oops, wurde von Marius geschlagen

Bryan
quelle
1

Diff wird normalerweise zum Vergleichen von zwei Dateien verwendet, kann aber noch viel mehr. In den diffOptionen "r" und "q" funktioniert es rekursiv und leise, dh es werden nur Unterschiede erwähnt, und genau das suchen wir:

diff -rq todo_orig/ todo_backup/

Wenn Sie auch Unterschiede für Dateien sehen möchten, die möglicherweise in keinem der beiden Verzeichnisse vorhanden sind:

diff -Nrq dir1/ dir2/

Sie können auch verwendet werden Rsyncund find. Für find:

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

Dateien mit demselben Namen und in denselben Unterordnern, jedoch mit unterschiedlichem Inhalt, werden jedoch nicht in den Listen angezeigt.

Wenn Sie ein Fan von GUI sind, können Sie Meld überprüfen . Es funktioniert gut in Windows und Linux.

Fábio
quelle
0

Ich habe dies mit dem Cmdlet "Compare-Objects" in Powershell geschrieben:

#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
quelle