Fórum Root.cz
Hlavní témata => Software => Téma založeno: Honza1Ubuntu 02. 12. 2017, 16:36:05
-
Snazim se vymyslet, jak pajpou presmerovat vystup ze skriptu.
Mam vystup ze skriptu, ktery jde do textoveho souboru. Jde mi o to, abych mohl ten vyskyp pajpou presmerovat primo ke komprimaci pomoci 7z, bez toho, aby se vystup ukladal na disk. (on je ten vystup docela velky). Zatim se mi to nepovedlo.
Aktualne:
./Skript.sh >> Vystup.txt
7z a -t7z -m0=lzma2 -mqs -mx=9 -mfb=273 -md=1024m -ms=on -ms=65536g -mmt=2 Archiv.7z
chtel bych to udelat takto:
./Skript.sh | 7z a -t7z -m0=lzma2 -mqs -mx=9 -mfb=273 -md=1024m -ms=on -ms=65536g -mmt=2 Archiv.7z
Nebo:
PROCES | 7z a -t7z -m0=lzma2 -mqs -mx=9 -mfb=273 -md=1024m -ms=on -ms=65536g -mmt=2 Archiv.7z
Jak to primo pajpovat, se mi nepodarilo.
-
v manulaovych strankach mas:
-si Read data from StdIn (eg: tar cf - directory | 7z a -si directory.tar.7z)
takze, nezkousel jsem vsechny tvoje prepinace, ale jednoduchy test dela co ma..
cat file.txt | 7z a -si file.7z
je to ono ?
-
Ale tam přece bude problém s tím, že klasický způsob komprese počítá s tím, že vidí celý soubor najednou a může podle toho koprimovat. Tady se musí komprimovat po nějakých částech, ale umí to 7z?
-
[...] ale umí to 7z?
pokud by to neumelo tak preci nema v manualu volbu pro cteni dat z stdin ;-)
-
Jasně, to sice umí, ale bude to fungovat stejným způsobem? Nemůže to mít horší kompresní výsledky? Nebo to má nějaké parametry jako velikost bloku nebo maximální alokovaná paměť v režim proudového zpracování oproti, když to má celý soubor na nereZZovém táci?
-
řešit celý soubor na jednou pro komprimaci je dost drahé, v krajních případech se setkávám s max. 1GB bloky.
7z komprimuje jednotlivé blocky, jejich nastavení je právě ta řada divných argumentů v samotném dotazu, moc sice optimálně nastavené nejsou, ale neznám HW, objem dat atd.
-
On @olio se IMO chtěl vyjádřit ke kompletním META datům o souboru, včetně jeho názvu, délky ap. a nedokázal/nedokáže si představit, že to umí fungovat i jinak a v tom je ten problém.
-
Jasně, to sice umí, ale bude to fungovat stejným způsobem? Nemůže to mít horší kompresní výsledky? Nebo to má nějaké parametry jako velikost bloku nebo maximální alokovaná paměť v režim proudového zpracování oproti, když to má celý soubor na nereZZovém táci?
Jezismarja, tak si to otestuj. Narvy vystup do souboru, pak ho nacatuj do 7z a pak si to zkomprimuj jako soubor. Oboji se stejnymi prepinaci, krome prepinace -si.
-
v manulaovych strankach mas:
-si Read data from StdIn (eg: tar cf - directory | 7z a -si directory.tar.7z)
takze, nezkousel jsem vsechny tvoje prepinace, ale jednoduchy test dela co ma..
cat file.txt | 7z a -si file.7z
je to ono ?
Diky, funkuje to
Tohle se mi najit nepodarilo predtim
-
Jasně, to sice umí, ale bude to fungovat stejným způsobem? Nemůže to mít horší kompresní výsledky? Nebo to má nějaké parametry jako velikost bloku nebo maximální alokovaná paměť v režim proudového zpracování oproti, když to má celý soubor na nereZZovém táci?
Cely soubor do pameti nenarve, pokud je velky, jen velikost bloku-slovniku. Ta se da nastavit od 2 nebo 4 MB az do 1536 MB (diskretni hodnoty). Problem je, ze to spotrebuje cca 11-narobek RAM, tedy pri maximalnim slovniku, velikosti bloku 1536 MB to sezere 16.5 GB RAM cca (a pokud se komprimuje hodne souboru, jeste se naroky zvysi cca 0.5-2 GB RAM na milion souboru).
-
7z komprimuje jednotlivé blocky, jejich nastavení je právě ta řada divných argumentů v samotném dotazu, moc sice optimálně nastavené nejsou, ale neznám HW, objem dat atd.
Je to nastavene na nejlepsi moznou kopresi, optimalnejsi zpusob jsem nenasel. Pravda, je to pomale. Velikost slovniku je parametr -md a velikost bloku (coz nevim co presne ma namysli) se da nastavit podstatne vetsi, aby byl libovolne velky archiv jako jeden blok (-ms).
Ale tady se blok rozumi velikost slovniku -md, coz velikosti bloku, do kterych je archiv rozdelen, odpovida.
-mmt je multithreating, kolik vlaken procesoru se pouzije. Problem je, ze ja jeden slovnik lze pouzit max. 2 vlakna, s kazdou zapocatou dvojici vlaken se musi do pameti paralelne alokovat slovnik. Pokud das -mmt=on, alokuje si to vsechny dostupna vlakna CPU (multi-threating jde jen u lzma2, u lzma ne). Kombinace -md=1536m -mmt=16 znamena, ze potrebujes cca 132 GB RAM, pokud das -mmt=2 nebo -mmt=off, potrebujes 16.5 GB RAM.