Fórum Root.cz

Hlavní témata => Software => Téma založeno: M Z 02. 09. 2019, 10:53:20

Název: Konverze archivu ze zip do 7z
Přispěvatel: M Z 02. 09. 2019, 10:53:20
Ahoj,

potreboval bych konvertovat nekolik stovek zip archivu do 7z (s heslem a AES-256 sifrovanim). Neni problem napsat skript, ktery archivy po jednom extrahuje do tmp adresare a znovu zkomprimuje, ale to je dost nesikovne. Neexistuje nejaky tool, ktery by to umel bez ukladani na disk? Napsat neco v Pythonu nebo Perlu, co otevre jeden stream z existujiciho zip souboru a preda data do druheho pro zapis do noveho archivu nemuze byt takovy problem. Nejsem programator, takze si to mozna predstavuji moc jednoduse  :).

Dekuji predem a s pozdravem
M.Z.
Název: Re:Konverze archivu ze zip do 7z.
Přispěvatel: snuff1987 02. 09. 2019, 11:08:41
Existuje... Vola sa to tmpfs. Rozbalis to do particie ktora je typ tmpfs  a je vyclenena z RAM a nasledne zbalis na disk.. Zvysok je otazka skriptu.
Název: Re:Konverze archivu ze zip do 7z.
Přispěvatel: Miroslav Šilhavý 02. 09. 2019, 11:16:15
Souhlas, tmpfs je jediné rozumné řešení, nicméně i to je svým způsobem "na disk".
Přebalit to jen jako proud dat - jako např. u tarovaných archivů - zip opravdu nejde.
7zip navíc umí využít víc jader (s malou penalizací na kompresním poměru) - a k tomu potřebuje mít možnost přistupovat k vícero souborům naráz.
Název: Re:Konverze archivu ze zip do 7z
Přispěvatel: M Z 02. 09. 2019, 15:39:45
Tak tmpfs by nebyl spatny napad, ale archivy maji stovky GB. Server ktery ma TB RAM mam jen jeden a na tohle ho vyuzit nemuzu 8). Neda se nic delat, bude to muset po jednom rozbalit na disk a zase zabalit.
Název: Re:Konverze archivu ze zip do 7z
Přispěvatel: Miroslav Šilhavý 02. 09. 2019, 15:49:47
Tak tmpfs by nebyl spatny napad, ale archivy maji stovky GB. Server ktery ma TB RAM mam jen jeden a na tohle ho vyuzit nemuzu 8). Neda se nic delat, bude to muset po jednom rozbalit na disk a zase zabalit.

Možná by bylo na zváženou zabalit to při té příležitosti do taru a pak komprimovat. Maličko si asi uškodíte v kompresním poměru, ale v budoucnu se Vám podobná operace bude dělat líp - právě bez rozbalování na disk.
Název: Re:Konverze archivu ze zip do 7z
Přispěvatel: M Z 02. 09. 2019, 15:57:05
Jsou to stovky GB velke archivy a zip ma na rozdil od tar moznost rychle zobrazit obsah archivu a extrahovat jednotlive soubory/adresare bez cteni celeho taru od zacatku. Obavam se, ze nic jineho nez zip, to byt nemuze.
Název: Re:Konverze archivu ze zip do 7z
Přispěvatel: Miroslav Šilhavý 02. 09. 2019, 15:59:03
Jsou to stovky GB velke archivy a zip ma na rozdil od tar moznost rychle zobrazit obsah archivu a extrahovat jednotlive soubory/adresare bez cteni celeho taru od zacatku. Obavam se, ze nic jineho nez zip, to byt nemuze.

Jenže 7z nebo XZ takovou výhodu už nemají - mají solid archivaci, tj. je potřeba rozbalit vše před tím, než můžete seeknout k jednotlivému souboru. Pokud potřebujete tuto funkci, pak nemáte jinou možnost, než zůstat u běžného ZIPU.
Název: Re:Konverze archivu ze zip do 7z
Přispěvatel: crown 02. 09. 2019, 17:19:52
ta solid archivace tam sla zapnout/vypnout.

info treba zde https://sourceforge.net/p/sevenzip/discussion/45797/thread/feb72a3e/ (https://sourceforge.net/p/sevenzip/discussion/45797/thread/feb72a3e/)
Název: Re:Konverze archivu ze zip do 7z
Přispěvatel: Miroslav Šilhavý 02. 09. 2019, 17:20:48
ta solid archivace tam sla zapnout/vypnout.

info treba zde https://sourceforge.net/p/sevenzip/discussion/45797/thread/feb72a3e/ (https://sourceforge.net/p/sevenzip/discussion/45797/thread/feb72a3e/)

To je pravda, ale pak nebude přínos komprese proti ZIP tak výrazný, zejm. ne na malých souborech u kterých bývá problém extrahovat jednotlivě.
Název: Re:Konverze archivu ze zip do 7z
Přispěvatel: Ondrej Nemecek 02. 09. 2019, 18:58:48
Jsou to stovky GB velke archivy a zip ma na rozdil od tar moznost rychle zobrazit obsah archivu a extrahovat jednotlive soubory/adresare bez cteni celeho taru od zacatku. Obavam se, ze nic jineho nez zip, to byt nemuze.

Tak tar asi taky nemusi nacitat .tar celý celý - to by odporovalo jeho použití na páskách, ne? Ale nevím, zda to funguje s kompresí.

Záleží taky co je obsahem těch archivů. Nadhodil bych ještě možnost komprimovaného filesystému, kde třeba v případě deduplikace můžete docílit značné efektivity využití úložného prostoru (v některých případech tedy to může vyjít lépe než u zip či 7z balíčků).
Název: Re:Konverze archivu ze zip do 7z
Přispěvatel: Miroslav Šilhavý 02. 09. 2019, 19:02:28
Tak tar asi taky nemusi nacitat .tar celý celý - to by odporovalo jeho použití na páskách, ne? Ale nevím, zda to funguje s kompresí.

Je to přesně tak. Tar+komprese je vlastně solid archiv, proto i tar+gzip komprimoval vždy lépe, než samotný zip.
Rar, pokud se pamatuji, přišel se solid archivem a taky s archivací podle přípony (na dosu), čímž docílil toho, že podobné soubory se komprimovaly blízko sebe a tím docílil lepší komprese - něco tak na čtvrtině cesty mezi kompresí a kompresí s deduplikací.

Archivátor s vnitřní deduplikací neznám, ale docela by to mohlo být zajímavé, jen by asi bylo těžké určit velikost bloku pro deduplikaci. Malý blok = hodně režie. Velký blok = menší šance zásahu.
Název: Re:Konverze archivu ze zip do 7z
Přispěvatel: ByCzech 02. 09. 2019, 19:06:30
Ahoj,

potreboval bych konvertovat nekolik stovek zip archivu do 7z (s heslem a AES-256 sifrovanim). Neni problem napsat skript, ktery archivy po jednom extrahuje do tmp adresare a znovu zkomprimuje, ale to je dost nesikovne. Neexistuje nejaky tool, ktery by to umel bez ukladani na disk? Napsat neco v Pythonu nebo Perlu, co otevre jeden stream z existujiciho zip souboru a preda data do druheho pro zapis do noveho archivu nemuze byt takovy problem. Nejsem programator, takze si to mozna predstavuji moc jednoduse  :).

Dekuji predem a s pozdravem
M.Z.

Ano jde to. 7z umí přidávat z stdin, viz parametr -si. Můžete si vyzkoušet:

Kód: [Vybrat]
echo "testovací data do archivu" | 7z -sipath/to/file/in/archive/testik.txt a newarchive
Název: Re:Konverze archivu ze zip do 7z
Přispěvatel: ByCzech 03. 09. 2019, 11:12:17
Stačí něco takového?
Název: Re:Konverze archivu ze zip do 7z
Přispěvatel: Jan Fikar 03. 09. 2019, 11:28:26
Archivátor s vnitřní deduplikací neznám...

třeba lrzip se o něco takového snaží: https://github.com/ckolivas/lrzip (https://github.com/ckolivas/lrzip)
Název: Re:Konverze archivu ze zip do 7z
Přispěvatel: M Z 05. 09. 2019, 09:55:06
Staci, presne neco takoveho jsem si predstavoval.
Dekuji.
Název: Re:Konverze archivu ze zip do 7z
Přispěvatel: ByCzech 06. 09. 2019, 15:50:38
Staci, presne neco takoveho jsem si predstavoval.
Dekuji.

Rádo se stalo. Je to drobnost i když může být užitečná. Je tam docela potenciál na vylepšení (command line switche či environment proměnné pro nastavování 7z(a), vícevláknové zpracování ap.), tak kdyby byla potřeba dejte vědět, je to občas příjemná oddechová činnost kutit tyhle malé užitečné nástroje.
Název: Re:Konverze archivu ze zip do 7z
Přispěvatel: Honza1Ubuntu 18. 09. 2019, 12:46:45
U solid archoivace se nemusi rozbalovat archiv cely, ale jen jeden slovnik-blog. Velikost slovniku je od par MB do 1536 MB dat u 7z (a sezere to min. 11x narobek RAM pri komprimaci pro kazdou zapocatou dvojici jader). Takze pro dekompresi se nemusi rozbalovat cely archiv, ale jen dany blok, ve kterem soubor(y) je-jsou. Je-li blogu vic, musi se propocitat vsechny blogy, zatez na CPU.

Ze zip do 7z pri vice soubory s adresarovou strukturou je to dost tezko bez rozbalovani na disk, to moc nema smysl. Jako proud dat to ma horsi kompresi.Kdyz se pred 7z data taruji, uz to nehleda tak dobre podobnosti mezi soubory, jako, kdyz to komprimuje slozku. U novejsich 7z je -mqs volba, kde to komprimuje soubory za sebou nejdriv podle pripony, pak podle jmena a umisteni razene, o dost lepsi komprese.

Pokud je v zip ci jinem archivu jen jeden soubor, zadne adresare, pak staci
Kód: [Vybrat]
7z e -so Archiv.pripona | 7z a -si -t7z -m0=lzma2 -mx=9 -mfb=273 -md=1536m -ms=on -ms=65536g -mmt=2 NovyArchiv.7z
Archiv s jen jednim souborem se resi tady:
https://forum.root.cz/index.php?topic=21827.0

-md=1536m velikost slovniku nejvetsi mozna zabere 16.5 GB RAM pro kazdou zapocatou dvojici jader (plus filelist, u jednoho souboru nepodstatny), -mmt=2 je pocet pouzitych jader. -mqs je razeni souboru se stejnou priponou za sebou prednostne, u novych 7z, starsi verze 7z maji tuto moznost automaticky bez vyberu jine (a -mqs neznaji). Prikaz jsem zadal tak, aby byla komprese co nejlepsi (a jen 2 vlakna, aby to nevyzralo vic RAM). Pri malo ram je potreba zmensit slovnik -md (v megabajtech moznosti od par MB, 16m, 32m, 48m, 64m, 96m, 128m, 192m, 256m, 384m, 512m, 768m, 1024m, 1536m), sezere to pri vyuziti 1-2 jader cca 11x nasobek RAM plus filelist (cca 0.5-1 GB na milion souboru).