7Zip - Befehlszeile: Ordner nach Platzhaltermuster ausschließen?

107

Haben Sie eine Idee, wie Sie Pfade mit Platzhalterzeichen von einem 7zip-Befehl in der Befehlszeile ausschließen können?

Ich mache so etwas:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0

und möchte alle ausschließen \bin\*.*oder \obj\*.*Ordner unter „FolderToArchive“ gefunden.

Um Dateien auszuschließen, können Sie den -xParameter verwenden. Die Hilfedatei enthält dieses Beispiel für die Verwendung von -x:

7z a -tzip archive.zip *.txt -x!temp.*

Das ist großartig, um eine Datei auszuschließen. Aber auch hier möchte ich einen von Platzhaltern angegebenen Ordner ausschließen. Unter meinem „FolderToArchive“ gibt es mehrere Ordner, unter diesen Ordnern kann es sein können oder nicht bin\und obj\Ordner. Ich möchte diese nicht in das Archiv aufnehmen.

Ich habe Muster wie ausprobiert

-x!bin\*
-x!bin\*.*
-x!\bin\*
-x!\bin\*.*
-x!\\bin\\*
-x!\\bin\\*.*

Keiner scheint den bin\Ordner auszuschließen . Ist das einfach eine Beschränkung von 7zip?

Yoopergeek
quelle

Antworten:

131

Um die Ordner bin und obj rekursiv auszuschließen , können Sie den folgenden Befehl verwenden:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0 -xr!bin -xr!obj
heavyyd
quelle
5
Für alle anderen: Wenn Sie nur die Dateien im Stammverzeichnis ignorieren möchten, verwenden Sie -xr0!*.zip- zumindest könnte ich es ohne das nicht zum Laufen bringen r0.
Oliver
6
Befindet sich dies in einer Linux / Unix-Befehlszeile, müssen Sie diese möglicherweise in einfache Anführungszeichen setzen, um keine Vorverarbeitung durch die Shell hinzuzufügen, z. B. '-x!$RECYCLE.BIN'um den Papierkorb eines externen Laufwerks auszuschließen.
thanosa75
15

Verwenden Sie -r oder -xr vorsichtig, um Fehler zu vermeiden.

Angenommen, Sie haben Verzeichnisse wie:

.\path1\path2\bin
.\path1\path2\src
.\path3\path4\path5\bin
.\path3\path4\path5\src

und führe den Befehl aus:

7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -xr!bin

was du in archive.7z hast:

.\path2\src
.\path5\src

Das heißt, das .\path2\und .\path5\wurde der oberste Ordner in archive.7z, und beide binVerzeichnisse wurden ausgeschlossen.

-x unterstützt nur Pfad / Dateiname relativ zum obersten Ordner im Archiv.

Wenn Sie also nur .\path1\path2\bindie anderen "bin" -Verzeichnisse ausschließen , aber einschließen möchten , sollte der Befehl folgendermaßen lauten:

7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -x!path2\bin

Ich habe versucht, den absoluten Pfad in -x zu verwenden, aber es gelang mir nie.


Aktualisieren:

Es gibt eine Option -spfin 7z für Linux, die mit absolutem Pfad arbeitet.

Laut Marco gibt -spfes das auch unter Windows ab 7-zip 15.14

Zhazha
quelle
2
Hinweis: Zumindest unter Ubuntu ist es am besten, all diese -x-Begriffe in einfache Anführungszeichen '-x!path2\bin'zu setzen, damit keine Shell-Substitution auftritt ... (Sie erhalten einen viel längeren, syntaktisch falschen „Befehl“ ...)
Frank Nocke
Um auf @FrankNockes Kommentar zu verweisen, können Sie dies auch unter Windows tun, um Punkte in '-xr!\.foo'
Ordnernamen