
Ich habe ein ZIP-Archiv mit vielen Dateien und eine Klartextdatei mit einer Dateiliste (~10.000 Elemente), die ich mit Bash aus diesem Archiv extrahieren muss.
Wie kann dieser Vorgang am besten durchgeführt werden? Der naheliegendste Weg besteht darin, für jede Zeile der Datei „unzip“ auszuführen, aber das scheint sehr langsam zu sein.
Antwort1
Anstatt unzip
jede einzelne Datei einzeln auszuführen, können Sie die Funktion auf der gesamten Dateiliste ausführen, indem Sie die Klartextdatei als Eingabe verwenden:
unzip -j MyZipFile.zip <<<textfile
Antwort2
Beim Entpacken können Sie angeben, welche Dateien extrahiert werden sollen:
unzip archive.zip file1.txt file2.txt file3.txt ...
Dies funktioniert jedoch nicht bei 10.000 Elementen. Sie können Ihre Dateiliste in Blöcke zu je 100 aufteilen und unzip damit ausführen. Dies wäre eine schnellere Implementierung, als wenn Sie jede Datei einzeln extrahieren würden.
Antwort3
Sie könnten xargs mit der -a
Option verwenden, seine Argumente aus einer Datei zu lesen. Verwenden Sie wahrscheinlich auch ein Flag, um die Anzahl der Argumente auf eine angemessene Menge zu begrenzen, um sicherzustellen, dass es nicht zu viele sind, als dass die Shell sie verarbeiten könnte, wenn eine solche Begrenzung besteht.