Zwei Verzeichnisse mit Ausnahme von \ bin \ und \ obj \ rekursiv vergleichen

1

Ich versuche WinMerge zu verwenden, um zwei Verzeichnisse zu vergleichen:

C: \ Benutzer ... \ Desktop \ Compare \ 35_A

C: \ Benutzer ... \ Desktop \ Compare \ 35_HS

## This is a directory/file filter for WinMerge 
## This filter lets through only files ASP.NET developers care about 
name: ASP.NET Devel 
desc: Lets through only files ASP.NET developer cares about

## This is an exclusive filter 
## (it lets through only matching files) 
def: exclude 

## Filters for filenames begin with f: 
## Filters for directories begin with d: 
## (Inline comments begin with " ##" and extend to the end of the line) 

f: \.xml$ 
f: \.xlst$
f: \.xsl$
f: \.xslt$
f: \.dtd$ 
f: \.html$ 
f: \.htm$ 
f: \.css$ 
f: \.gif$ 
f: \.bmp$ 
f: \.jpg$ 
f: \.png$ 
f: \.js$ 
f: \.dll$ 
f: \.aspx$ 
f: \.asmx$ 
f: \.ascx$ 
f: \.vb$ 
f: \.resx$ 
f: \.cs$ 
f: \.js$ 
f: \.vbproj$ 
f: \.csproj$ 
f: \.sln$ 
f: \.webinfo$ 
f: \.config$ 

d: \\*$ ## Subdirectories 

def: exclude
d: \\bin
d: \\obj

Die letzten 3 Zeilen sind nicht Teil des Filters. Ich habe sie hinzugefügt, da ich versuche, alles und jedes in allen \ bin \ - und \ obj \ -Verzeichnissen zu ignorieren. Ich habe beide ausprobiert def: includeund def: excludekeine liefert genaue Ergebnisse.

Ich habe die Hilfedokumentation in WinMerge zu den Dateifiltern durchgesehen, verstehe sie jedoch nicht.

sab669
quelle

Antworten:

2

Einschließen und Ausschließen beziehen sich auf das, was in der Liste der Dateien und Ordner nach dem Vergleich angezeigt wird. Die Filter werden mit und ohne die Dinge aus dieser Liste.

Wenn Sie einen Ausschlussfilter verwenden , werden alle nicht im Filter aufgeführten Elemente aus der Dateiliste ausgeschlossen .

Wenn Sie einen verwenden umfassen Filter, enthält es in der Dateiliste, alles nicht im Filter enthalten ist.

In Ihrem Fall verwenden Sie einen Ausschluss, sodass Sie nur die Dateien und Ordner sehen, die Sie speziell in Ihrem Filter auflisten. Zum Blockieren binund für objOrdner müssen Sie die Namen aller anderen Ordner kennen, die Sie möglicherweise sehen möchten, damit sie in Ihrem Filter aufgelistet werden können.

Ich finde, für Code ist es einfacher, einen Einschlussfilter zu verwenden. Auf diese Weise kann ich Ordner und Dateien blockieren, die mir egal sind.

Ändern Sie das erste def:, um zu sein include, und entfernen Sie das zweite def. Ich denke, du kannst nur einen haben def. Deine d:Regeln wären dann

d: \\bin$
d: \\obj$
Patrick Seymour
quelle
Ich müsste eine unermessliche Anzahl von Filtern für alle möglichen Dateitypen hinzufügen, die mir egal sind, wenn ich nicht mehrere def:Anweisungen verwenden kann. Aber ich werde es zumindest mit den Verzeichnissen versuchen und sehen, ob das funktioniert. Ehrlich gesagt denke ich, ich könnte einfacher sein, nur ein Backup zu erstellen und diese Ordner vorerst manuell zu durchsuchen und zu löschen.
Sab669
Ich kenne Ihre Ordnerstruktur und Ihren Inhalt offensichtlich nicht. Ich habe nur gesagt, dass ich es persönlich einfacher finde, Code zu verwenden. Ihr Kilometerstand kann variieren und ist es oft.
Patrick Seymour
Meinetwegen. Ich bin nur überrascht, dass Sie nicht sowohl include als auch exclude verwenden können. Oder mindestens zwei separate Filter. Es gibt nur ein paar Textdateien, Bilder, Reißverschlüsse und eine Handvoll proprietärer Formate.
Sab669
1

Wie bereits erwähnt, kann es nur eine def:Zeile geben, und die Filter entsprechen genau dem Gegenteil der def:Direktive (dh wann enthalten defdie excludeFilter tatsächlich Dateien ? ).

Mit diesem Wissen können wir also sehen, dass die folgende Zeile alle Unterverzeichnisse enthält.

d: \\*$ ## Subdirectories

Ich habe WinMerge nicht installiert und bin mit der RegEx-Engine nicht vertraut. Sie können jedoch versuchen, alle Unterverzeichnisse mit Ausnahme von "bin" und "obj" mit einer negativen Suche einzuschließen:

d: ^\\((?!bin|obj)(.+)|(.+)(?<!bin|obj))$
heavyyd
quelle
0

Mit der Antwort von @ heavyd hatte ich nur begrenzten Erfolg, aber später stellte ich fest, dass dies in WinMerges scheinbarem Nachfolger WinMerge2011 viel einfacher ist.

Mit WinMerge2011 habe ich verwendet

xd: \\bin(\\.+|)$
xd: \\obj\\

Es kann schwierig sein, Dokumentation zu finden, aber ich fand http://forums.winmerge.org/viewtopic.php?f=4&t=1010

Datei- / Verzeichnisfilter wurden in WinMerge 2011 verbessert, um das Kombinieren von Einschluss- und Ausschlussregeln zu ermöglichen. Wenn das def: label in einer .flt-Datei weggelassen wird, werden f: und d: als Einschlussregeln verwendet, sofern kein x vorangestellt ist. In diesem Fall werden sie als Ausschlussregeln verwendet. Die Beschriftungen f: und d:, denen optional ein x vorangestellt wird, um eine Ausschlussregel zu bilden, können auch mit Platzhalterfiltern verwendet werden.

FYI WinMerge wird anscheinend nicht mehr entwickelt. Siehe Hinweise zur Übersicht in https://en.wikipedia.org/wiki/WinMerge . Laden Sie WinMerge2011 unter https://bitbucket.org/jtuc/winmerge2011/downloads/ herunter.

RockResolve
quelle