So entpacken Sie mehrere ZIP-Dateien in eine einzige Verzeichnisstruktur (z. B. Export von Google Drive-Ordnern)

So entpacken Sie mehrere ZIP-Dateien in eine einzige Verzeichnisstruktur (z. B. Export von Google Drive-Ordnern)

Angenommen, Sie haben mit einem unkomprimierten Verzeichnis Amit 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.zipund 2.zipdaraus abgeleitet A. 1.zipenthält nur file1.txtund 2.zipenthä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 Aaus der Kombination von 1.zipund 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 p7zipSie können p7zip auf dem Mac mit Brew oder den Paketmanagern Ihrer Distribution unter Linux installieren .

verwandte Informationen