femi1100
Goto Top

7z Datei in Unterverzeichnis einer zip-Datei aktualisieren

Entpacken, aktualisieren und wieder packen wäre eine Alternative aber es muss doch möglich das direkt zu machen

Beispiel:
In der Datei A:\Test.zip gibts Unterordner 1,2,3,4. Im Unterordner 3 befindet sich die Datei erneuern.txt, welche ich aktualisieren möchte. Sie befindet sich in X:\Unterverzeichnis\

so hat's jedenfalls nicht geklappt:
7z u A:\Test.zip\3\ X:\Unterverzeichnis\* erneuern.txt

Content-Key: 5219472660

Url: https://administrator.de/contentid/5219472660

Printed on: April 27, 2024 at 06:04 o'clock

Member: godlie
Solution godlie Jan 05, 2023 at 11:56:45 (UTC)
Goto Top
Hallo,
soweit ich das verstanden habe, müsstest du dir den betroffen Teil als Ordnerstruktuer erzeugen und dann mit u das Archiv updaten.

X:\update\3\erneuern.txt

7z u A:\test.zip X:\update\*.*

grüße
Member: femi1100
femi1100 Jan 05, 2023 at 13:18:44 (UTC)
Goto Top
Habe ich fast befürchtet, was ich schon rund um das Thema gelesen habe..
Die Ordnerstruktur erstellen wäre gleich dem entpackten Archiv. Nachdem dies ohnehin relativ klein ist und bleibt, spielt das auch keine Rolle die "entpack-update-pack" Methode fortzuführen.

Jedenfalls danke für die schnelle Antwort
Member: colinardo
Solution colinardo Jan 05, 2023 updated at 14:16:00 (UTC)
Goto Top
Servus.
Mit der Powershell geht auch ein direktes Update ohne angelegte Ordnerstruktur:
$zipfile = 'A:\test.zip'  
$updatefile = "X:\Unterverzeichnis\erneuern.txt"  
$subpath = '3/erneuern.txt'  
#--------------------
Add-Type -AssemblyName System.IO.Compression
Add-Type -AssemblyName System.IO.Compression.FileSystem
# ZIP-Datei im Updatemode öffnen
$zip = [System.IO.Compression.ZipFile]::Open($zipfile,[System.IO.Compression.ZipArchiveMode]::Update)
# evt. schon vorhandene Datei im Archiv aus Unterordner löschen
($zip.Entries | ? Fullname -eq $subpath) | %{$_.Delete()}
# neue Datei zur ZIP-Datei hinzufügen
[void][System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zip,$updatefile,$subpath)
# Ressourcen freigeben
$zip.Dispose()
Grüße Uwe
Member: AlRoDiSa
AlRoDiSa Jan 05, 2023 updated at 14:11:58 (UTC)
Goto Top
Zitat von @femi1100:

so hat's jedenfalls nicht geklappt:
7z u A:\Test.zip\3\ X:\Unterverzeichnis\* erneuern.txt

Hängt von der Art der Komprimierung ab

Wahrscheinlich sind innerhalb der ZIP noch weitere Dateien komprimiert?

Zitat aus 7ziphelp:

Update
This function letter u command is used to replace old files in your archive with newer files. The “u” command stands for update. This command prevents needing to decompress and recompress the entire archive. This command will not work with solid archives. Using the command on the terminal looks like this:

7z u example.zip *.doc
Member: femi1100
femi1100 Jan 05, 2023 at 14:33:20 (UTC)
Goto Top
Zitat von @AlRoDiSa:

Hängt von der Art der Komprimierung ab
Wahrscheinlich sind innerhalb der ZIP noch weitere Dateien komprimiert?

Zitat aus 7ziphelp:
This command will not work with solid archives.

Was soll man blos unter "SOLIDES Archiv" verstehen?
Es ist kein zip in zip enthalten. Linux binaries für Receiver und diverse scripts, also Textdateien sind enthalten.
Member: AlRoDiSa
Solution AlRoDiSa Jan 06, 2023 at 11:14:20 (UTC)
Goto Top
Zitat von @femi1100:

Was soll man blos unter "SOLIDES Archiv" verstehen?
Es ist kein zip in zip enthalten. Linux binaries für Receiver und diverse scripts, also Textdateien sind enthalten.

Was als "solid archive" gilt, kann man über die verschiedenen Such-Tools herausfinden.

Es reicht schon, wenn eine der gepackten Dateien einen zusätzlichen Datenstrom hat, oder eben auch die Art der Komprimierung von der üblichen abweicht.
Kann auch sein, dass sich die Update-Routine an etwas anderem stört ... ohne weitere Infos und Analysen ist es schwer eine klare Antwort zu geben.

Ich würde es binär ausschließen, also erst einmal nur die Scripte packen und updaten.
Funktioniert das sauber, dann eben die Linux Binaries packen und updaten.

and so on ...


Viel Erfolg
.