Vergleiche zwei Verzeichnisse rekursiv mit Ausnahme von \ bin \ und \ obj \

3514
sab669

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 diese hinzugefügt, da ich versuche, alles und alles in allen \ bin \ - und \ obj \ -Verzeichnissen zu ignorieren. Ich habe beide ausprobiert def: includeund def: excludebeide liefern keine genauen Ergebnisse.

Ich habe die Hilfedokumentation in WinMerge über die Dateifilter durchgesehen, aber ich verstehe das nicht.

1

3 Antworten auf die Frage

2
Patrick Seymour

Einschließen und ausschließen beziehen sich auf das, was in der Liste der Dateien und Ordner angezeigt wird, nachdem der Vergleich durchgeführt wurde. Die Filter werden mit und ohne die Dinge aus dieser Liste.

Wenn Sie einen Ausschlussfilter verwenden, schließt dies alles aus der Dateiliste aus, die nicht im Filter aufgeführt sind.

Wenn Sie einen Include- Filter verwenden, enthält dieser in der Dateiliste alles, was nicht im Filter enthalten ist.

In Ihrem Fall verwenden Sie einen Ausschluss, sodass nur die Dateien und Ordner angezeigt werden, die Sie speziell in Ihrem Filter auflisten. Zum Blockieren binund objOrdnen müssen Sie die Namen aller anderen Ordner kennen, die Sie möglicherweise sehen möchten, damit sie in Ihrem Filter aufgeführt werden.

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

Ändern Sie den ersten def:Eintrag includeund entfernen Sie den zweiten def. Ich denke, du kannst nur einen haben def. Deine d:Regeln wären dann

d: \\bin$ d: \\obj$ 
Ich müsste eine unzählige Anzahl von Filtern für alle Arten von Dateitypen hinzufügen, die sich darin befinden, die mich nicht interessieren, wenn ich nicht mehrere `def:` -Anweisungen verwenden kann. Aber ich versuche es zumindest mit den Verzeichnissen und sehe, ob das funktioniert. Ehrlich gesagt denke ich, dass ich vielleicht einfacher bin, eine Sicherungskopie zu erstellen und diese Ordner manuell zu suchen und zu löschen. sab669 vor 8 Jahren 0
Ich kenne Ihre Ordnerstruktur und den Inhalt offensichtlich nicht. Ich habe gerade gesagt, dass ich persönlich finde, dass Code einfacher ist. Ihr Kilometerstand kann variieren und ist oft der Fall. Patrick Seymour vor 8 Jahren 0
Meinetwegen. Ich bin nur überrascht, dass Sie sowohl Ein- als auch Ausschließen nicht verwenden können. Oder mindestens zwei separate Filter. Es gibt nur eine Reihe von Textdateien, Bildern, Reißverschlüssen und eine Handvoll proprietärer Formate. sab669 vor 8 Jahren 0
1
heavyd

Wie andere erwähnt haben, können Sie nur eine haben def:Linie, und die Filter tatsächlich die entgegengesetzte Wirkung der peform def:Richtlinie (dh wenn defist excludeFilter enthalten 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 nicht mit der RegEx-Engine vertraut, aber Sie könnten versuchen, eine negative Suche zu verwenden, um alle Unterverzeichnisse außer "bin" und "obj" einzuschließen:

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

Ich hatte etwas eingeschränkten Erfolg mit der Antwort von @ heavyd. Später stellte sich jedoch heraus, dass dies in WinMerges scheinbarem Nachfolger WinMerge2011 viel einfacher ist.

Mit WinMerge2011 habe ich verwendet

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

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

Datei- / Verzeichnisfilter wurden in WinMerge 2011 erweitert, um die Kombination von Ein- und Ausschlussregeln zu ermöglichen. Wenn Sie das Attribut def: in einer .flt-Datei auslassen, werden f: und d: als Einschlussregeln verwendet, sofern sie nicht mit x vorangestellt sind. In diesem Fall fungieren sie als Ausschlussregeln. Die Beschriftungen f: und d:, die wiederum optional mit x als Ausschlussregel versehen sind, können auch mit Platzhalterfiltern verwendet werden.

FYI WinMerge scheint nicht mehr entwickelt zu werden. Siehe Übersichtshinweise in https://en.wikipedia.org/wiki/WinMerge . Laden Sie WinMerge2011 unter https://bitbucket.org/jtuc/winmerge2011/downloads/ herunter.