Angenommen, Sie haben mit einem unkomprimierten Verzeichnis A
mit der folgenden Struktur begonnen:
$ tree A
A
└── inner_dir
├── file1.txt
└── file2.txt
1 directory, 2 files
Nehmen wir nun an, Sie haben zwei ZIP-Dateien erhalten 1.zip
und 2.zip
daraus abgeleitet A
. 1.zip
enthält nur file1.txt
und 2.zip
enthält nur file2.txt
:
# -l flag simply lists file contents
$ unzip -l 1.zip
Archive: 1.zip
Length Date Time Name
--------- ---------- ----- ----
0 2017-09-30 21:49 A/
0 2017-09-30 22:27 A/inner_dir/
0 2017-09-30 21:49 A/inner_dir/file1.txt
--------- -------
0 3 files
$ unzip -l 2.zip
Archive: 2.zip
Length Date Time Name
--------- ---------- ----- ----
0 2017-09-30 21:49 A/
0 2017-09-30 22:27 A/inner_dir/
0 2017-09-30 22:27 A/inner_dir/file2.txt
--------- -------
0 3 files
Mit welchem Befehl kann ich das ursprüngliche entpackte Verzeichnis programmgesteuert A
aus der Kombination von 1.zip
und wiederherstellen 2.zip
?
Kontext:Beim Exportieren eines großen Verzeichnisses aus Google Drive wird der Inhalt auf zwei oder mehr Zip-Dateien aufgeteilt. Jede Zip-Datei enthält eine Teilmenge der Dateien, die zusammen das ursprüngliche Verzeichnis wiederherstellen. Welche Dateien in welcher Zip-Datei enthalten sind, scheint mehr oder weniger zufällig zu sein. Ich suche nach einer Lösung, die sich auf n > 1 Zip-Dateien verallgemeinern lässt, nicht nur auf den Sonderfall von genau 2 Dateien.
Antwort1
Verschieben Sie die zu entpackenden Dateien in ein dediziertes Verzeichnis und verwenden Sie dann unzip
:
$ unzip '*.zip' -d combined
Archive: 1.zip
creating: combined/A/
creating: combined/A/inner_dir/
extracting: combined/A/inner_dir/file1.txt
Archive: 2.zip
extracting: combined/A/inner_dir/file2.txt
2 archives were successfully processed.
Überprüfen:
$ tree combined
combined
└── A
└── inner_dir
├── file1.txt
└── file2.txt
2 directories, 2 files
Antwort2
@lcharbon, Ihr Problem liegt in der Art und Weise, wie Zip mit nicht standardmäßiger Kodierung umgeht.
Sie können das Problem lösen, indem Sie p7zip verwenden, das damit besser zurechtkommt.
Hier ist der analoge Befehl mit p7zip:
7z x '*.zip' -ocombined
brew install p7zip
Sie können p7zip auf dem Mac mit Brew oder den Paketmanagern Ihrer Distribution unter Linux installieren .