Ich habe zahlreiche Zip-Archive, von denen jedes eine Reihe von Zip-Archiven enthält. Was ist der beste Weg, um alle in diesem Zip-Archiv und seinen untergeordneten Zip-Archiven enthaltenen Dateien, die selbst keine Zip-Archive sind, rekursiv zu extrahieren?
15
Antworten:
Dadurch werden alle Zip-Dateien in das aktuelle Verzeichnis extrahiert, mit Ausnahme der darin enthaltenen Zip-Dateien.
Obwohl hierdurch der Inhalt in das aktuelle Verzeichnis extrahiert wird, werden nicht alle Dateien ausschließlich in diesem Verzeichnis gespeichert, da der Inhalt möglicherweise Unterverzeichnisse enthält.
Wenn Sie eigentlich alle Dateien ausschließlich im aktuellen Verzeichnis haben wollen, können Sie ausführen
Hinweis: Dadurch werden Dateien gelöscht, wenn sich zwei Dateien mit demselben Namen in verschiedenen Verzeichnissen befinden.
Wenn Sie alle Zip-Dateien und die darin enthaltenen Reißverschlüsse rekursiv extrahieren möchten, werden im Folgenden alle Zip-Dateien im aktuellen Verzeichnis und alle darin enthaltenen Reißverschlüsse in das aktuelle Verzeichnis extrahiert.
quelle
while [ "
finden . -type f -name '*.? ar' | wc -l" -gt 0 ]; do find -type f -name "*.?ar" -exec mkdir -p '{}.dir' \; -exec unzip -d '{}.dir' -- '../{}' \; -exec rm -- '{}' \;; done
Soweit ich weiß, haben Sie Zip-Archive, die selbst Zip-Archive enthalten, und Sie möchten verschachtelte Zip-Archive jedes Mal entpacken, wenn eines extrahiert wird.
Hier ist ein Bash-4-Skript, das alle ZIP-Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen rekursiv dekomprimiert, jede ZIP-Datei nach dem Dekomprimieren entfernt und so lange weiterarbeitet, wie ZIP-Dateien vorhanden sind. Eine Zip-Datei in einem Unterverzeichnis wird relativ zu diesem Unterverzeichnis extrahiert. Warnung: Ungetestet: Erstellen Sie eine Sicherungskopie der Originaldateien, bevor Sie sie ausprobieren, oder
rm
verschieben Sie die ZIP-Datei aus dem Verzeichnisbaum .Das Skript funktioniert auch in zsh, wenn Sie die
shopt
Zeile durch ersetzensetopt nullglob
.Hier ist ein portables Äquivalent. Die Beendigungsbedingung ist etwas kompliziert, da
find
nicht spontan ein Status zurückgegeben wird, der angibt, ob Dateien gefunden wurden. Achtung: wie oben.quelle
unzip
tut dies nicht, weil der UNIX-Weg darin besteht, eine Sache zu tun und das gut zu machen, und nicht alle verrückten Sonderfälle in jedem Tool zu behandeln. Daher müssen Sie die Shell verwenden (die die Aufgabe erfüllt, Dinge gut zusammenzubinden). Dies macht es zu einer Programmierfrage, und da ALLE möglichen Programmierfragen in StackOverflow beantwortet wurden, hier: Wie entpacken Sie Archive in einem Verzeichnis und seinen Unterverzeichnissen rekursiv über die Unix-Befehlszeile?quelle
Dieses Perl-Skript extrahiert jede .zip-Datei in ein eigenes Unterverzeichnis. Führen Sie das Skript mehrmals aus, um verschachtelte ZIP-Dateien zu verarbeiten. ZIP-Dateien werden nach dem Extrahieren nicht gelöscht. Sie können diese Änderung jedoch vornehmen, indem Sie einen unlink () -Aufruf hinzufügen.
quelle
Der einfachste Weg ist, atool zu verwenden: http://www.nongnu.org/atool/ Es ist ein sehr gutes Skript, das zip-, unzip-, tar-, rar-Programme usw. verwendet, um ein Archiv zu extrahieren.
Verwenden
atool -x package_name.zip
Sie diese Option, um alle zu entpacken, oder verwenden Sie die einfachefor
Schleife, wenn Sie sie in einem Verzeichnis mit vielen Zip-Dateien verwenden möchten :for f in *; do atool -x $f; fi
(Sie müssencd
in das gewünschte Verzeichnis mit Zip-Dateien, bevor Sie dies verwenden).quelle
atool
Das Verhalten von unterscheidet sich hier nicht wesentlich von dem von unzip. Es extrahiert auch nicht rekursiv ZIP-Dateien.Sie sollten vorsichtig sein, wenn Sie ZIP-Dateien innerhalb von ZIP-Dateien automatisch entpacken:
http://research.swtch.com/2010/03/zip-files-all-way-down.html
Es ist möglich, eine Zip-Datei zu erstellen, die eine Zip-Datei als Ausgabe erzeugt, die eine Zip-Datei als Ausgabe erzeugt usw. usw. Das heißt, Sie können eine Zip-Datei erstellen, die ein fester Bestandteil des Programms zum "Entpacken" ist.
Außerdem erinnere ich mich an Leute, die Zip-Dateien erstellt haben, die "explodieren" würden. Dies ist eine sehr kleine Zip-Datei, die auf mehrere Gigabyte entpackt wird. Dies ist eine Facette der Komprimierungsmethode.
quelle
Vielleicht hilft das (hat bei mir funktioniert):
quelle
Ich brauchte eine Lösung wie die von Giles aus dem Jahr 2010, außer dass ich die Ordnerstruktur beibehalten und nicht alles in das oberste Verzeichnis entpacken musste. Hier ist meine Einstellung zu seiner mit drei hinzugefügten / geänderten Zeilen:
quelle
Kasse dieses Java-basierten Dienstprogramms nzip für verschachtelte zip-Dateien. Das Extrahieren und Komprimieren verschachtelter Reißverschlüsse ist mit den folgenden Befehlen ganz einfach
java -jar nzip.jar -c list -s readme.zip
java -jar nzip.jar -c extract -s "C: \ project \ readme.zip" -t Liesmich
java -jar nzip.jar -c compress -s readme -t "C: \ project \ readme.zip"
PS. Ich bin der Autor und werde gerne alle Fehler schnell beheben.
quelle