Sagen wir , ich möchte die Datei hinzufügen file.txt
zu foo.zip
, ich konnte einfach tun zip -u foo.zip file.txt
.
Innerhalb der Zip-Datei existiert jedoch bereits ein Ordner mit dem Pfad foo.zip/very/many/paths/
(relativ zur Zip-Datei).
Wie würde ich file.txt
der Zip-Datei hinzufügen , damit sie sich in der Zip-Datei befindet foo.zip/very/many/paths/file.txt
?
Ich könnte zuerst die benötigte Verzeichnisstruktur erstellen, aber gibt es keinen einfacheren Weg?
Normalerweise würde ich das so machen:
$ ls file.txt foo.zip $ mkdir sehr $ mkdir sehr / viele $ mkdir sehr / viele / Pfade $ cp file.txt sehr / viele / Pfade $ zip -u foo.zip sehr / viele / Pfade / file.txt $ rm -rf sehr
mkdir
Befehle kürzen , mitmkdir -p very/many/paths
denen nach Bedarf übergeordnete Verzeichnisse erstellt werden. ;)updatezip very/many/path/file.txt file.txt
7z a yourfile.7z -sivery/many/paths/file.txt < file.txt
aber wenn ich dies mit zip versuche, führt dies leider zu einem Fehler. Also funktioniert diese Funktion nur mit 7z, nicht mit zip / tar :(Antworten:
Pythons Zipfile-Bibliothek verwenden?
OK. Derzeit gibt es keine 'test.zip' ...
Fügen wir '/ etc / motd' als 'text / motd' zur nicht existierenden Zip-Datei hinzu ...
Die zipfile-Bibliothek war nett genug, um 'test.zip' zu erstellen.
..und es scheint zu enthalten, was ich wollte ...
Lassen Sie es uns überprüfen, indem Sie es auf stdout entpacken ...
Fein!
Jetzt fügen wir eine 2. Datei hinzu ...
quelle
Eine Möglichkeit, die ich vorschlagen würde, ist das Entpacken, Verschieben der Datei und anschließendes erneutes Komprimieren.
Nehmen wir als Beispiel an, wir haben diese Zip-Datei:
Um die Datei zu entpacken, erstellen wir zunächst ein Verzeichnis
/tmp
. Dann werden wir die folgenden Aktionen ausführen:foo.zip
in unser temporäres Verzeichnisd=$(mktemp -t -d foo.zip.XXXXXX) && unzip -d $d foo.zip
$d
).mv ${d}/file.txt ${d}/very/many/paths/
cd
um temp tem & Rekomprimieren Sie alles in eine neue Zip-Datei( cd $d && zip -r foo.zip ./* )
mv ${d}/foo.zip ./
rm -rf ${d}
quelle
Sie können Ant dafür verwenden.
Erstellen Sie eine Datei mit dem Namen
build.xml
:Dann können Sie es im gleichen Verzeichnis
build.xml
wie folgt ausführen:ant add-file-to-zip -Dzip=foo.zip -Dfile=file.txt -Dpath=/very/many/paths/file.txt
quelle