Erstellen eines Archivs aus einem Verzeichnis, ohne dass der Verzeichnisname zum Archiv hinzugefügt wird


83

Ich habe folgende Ordnerstruktur:

  • Wurzel
    • folder1
    • folder2
    • folder3
    • 7za.exe

Ich möchte das 7-zip-Befehlszeilentool ausführen, um alle Dateien in folder1eine ZIP-Datei mit dem Namen zu komprimieren folder1.zip.

Folgendes ausführen

7za.exe a -tzip folder1.zip folder1\\*.*

erzeugt erwartungsgemäß eine zip-Datei. Wenn ich jedoch die ZIP-Datei öffne, befindet sich darin ein Ordner namens folder1und darin befinden sich alle Dateien, die sich in diesem Ordner befanden. Ich möchte nicht, dass der Ordnername zum ZIP-Ordner hinzugefügt wird, dh, ich möchte alle Dateien in einem "Flat" -Dateiformat hinzufügen.

Ich möchte das Befehlszeilentool auch nicht rekursiv für jede einzelne Datei / jeden einzelnen Ordner ausführen.

Gibt es einen Schalter, der diese Funktionalität bietet?


Kannst du cdin ordner1 und 7za.exe a -tzip ..\folder1.zip *.*?
Zpletan

Antworten:


136

Aus der 7-Zip- Hilfedatei:

ein (Hinzufügen) Befehl

Fügt Dateien zum Archiv hinzu.

Beispiele

7z a archive1.zip subdir\

Fügt alle Dateien und Unterordner aus dem Ordner "subdir" zum Archiv "archive1.zip" hinzu. Die Dateinamen im Archiv enthalten das Unterverzeichnis \ prefix.

7z a archive2.zip .\subdir\*

Fügt alle Dateien und Unterordner aus dem Ordner "subdir" zum Archiv "archive2.zip" hinzu. Die Dateinamen im Archiv enthalten kein Unterverzeichnis \ prefix.

cd /D c:\dir1\

7z a c:\archive3.zip dir2\dir3\

Die Dateinamen im Archiv c: \ archive3.zip enthalten dir2 \ dir3 \ prefix, aber nicht c: \ dir1 \ prefix.

Der gewünschte Befehl wäre also: 7za.exe a folder1.zip .\folder1\*

Achten Sie auch auf den Umgang von 7-Zip mit Platzhaltern. Es wird nicht *.*als "alle Dateien" behandelt - es bedeutet "alle Dateien mit einem Punkt im Dateinamen". Dateien ohne Erweiterung werden übersehen. Wenn Sie wirklich alle Dateien möchten, verwenden Sie *stattdessen einfach .

Schließlich wird der -tzipParameter nicht benötigt, wenn der Archivdateiname auf endet .zip. 7-Zip ist intelligent genug, um herauszufinden, welches Format Sie in diesen Fällen benötigen. Dies ist nur erforderlich, wenn Sie eine benutzerdefinierte Erweiterung wünschen (z. B. 7za.exe a -tzip foo.xpi <files>für ein Mozilla-Add-On).


2

Das hat bei mir funktioniert

Betrachten Sie die Ordnerstruktur wie C: \ Parent \ SubFolders ..... Und Sie möchten parent.zip erstellen, das alle Dateien und Ordner C: \ Parent ohne übergeordneten Ordner enthält.

cd /D "C:\Parent"

"7z.exe" a Parent.zip "*.*" -r

Dadurch wird Parent.zip in C: \ Parent erstellt


2
Dies dupliziert eine andere Antwort und fügt keinen neuen Inhalt hinzu. Bitte posten Sie keine Antwort, es sei denn, Sie haben tatsächlich etwas Neues beizutragen.
DavidPostill

Nun, während ich nach einer Lösung suchte, bekam ich nicht genau diese Lösung. Natürlich werde ich nicht nur einige Antworten kopieren, die ich online gefunden habe. Ich verbringe einige Zeit damit und hatte das Gefühl, ich sollte es teilen. Genau diese Antwort finden Sie hier und auf von mir geposteten Stack Overflow.
Pritesh Dhokchaule

Beachten Sie, dass 7-Zip nicht *.*"alle Dateien" bedeutet, sondern "alle Dateien, die einen Punkt als Teil des Dateinamens haben." In dieser Antwort werden also Dateien ausgelassen, die keine Erweiterung haben (dies wird in der akzeptierten Antwort vermerkt).
Bill_Stewart

1

Nur um die akzeptierte Antwort zu erweitern (ich konnte dort keinen Kommentar hinzufügen):

Unter Linux funktionierte das Hinzufügen von '*' nicht für mich, so dass ich eine ausführlichere Befehlszeile zusammenstellte, die das gewünschte Ergebnis lieferte:

curr_dir=$(pwd); \ 
cd source_code/lambda/ ; \
7z a ../../lambda.zip .; \
cd $curr_dir \
unset curr_dir

===========

Skript Erklärung:

  • aktuellen Verzeichnispfad speichern, um ihn später zu verwenden;
  • Navigieren Sie zu dem Verzeichnis, das archiviert werden muss.
  • Archiv erstellen (Hinweis '.' (Punkt) am Ende);
  • gehe zurück zum ursprünglichen Verzeichnis;
  • Entferne die Variable, die den ursprünglichen Pfad gespeichert hat

Ich hoffe, es könnte für jemanden nützlich sein.


Ich würde vorschlagen, die *in Anführungszeichen zu setzen (andernfalls erweitert die Shell sie auf die Dateien an dieser Stelle).
Simon Sobisch

-1

Wie wäre es damit. zB Ordner / Unterordner1, Ordner / Unterordner2

Wählen Sie alle Unterordner aus. Klicken Sie mit der rechten Maustaste und erstellen Sie ein Archiv. Wählen Sie ein beliebiges Format aus

* Der Archivname ist der übergeordnete Ordner.

Einfach richtig?


3
Die Frage bezieht sich auf die CLI für 7-zip und nicht auf die Verwendung der GUI. Das Erlernen der GUI ist sinnlos, wenn Sie Dinge automatisieren möchten.
binki
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.