Některé komprimační programy mohou při provádění úkolu zobrazit informace (jako je kompresní poměr nebo celkový čas a velikost), například xz -v
:
--- % 2,580.2 KiB / 6,552.0 KiB = 0.394 1.2 MiB/s 0:05
Při komprimaci velkého souboru bych chtěl znát kompresní poměr uprostřed úlohy, abych mohl proces zastavit, pokud je kompresní poměr nízký, a nechat jej nekomprimovaný.
Existují nějaké další programy s touto funkcí? (xz
má vysoký kompresní poměr, ale je pomalý)
Přijatá odpověď:
Obecný způsob, jak toho dosáhnout, je použít něco jako pv
ke sledování vstupní i výstupní velikosti komprimačního programu. Například:
$ pv -cpterba -N in /dev/urandom | gzip | pv -cpterba -N out > /dev/null
out: 956MiB 0:00:42 [23.1MiB/s] [22.8MiB/s] [ <=> ]
in: 956MiB 0:00:42 [23.1MiB/s] [22.8MiB/s] [ <=> ]
Výše je dost snadné vidět, že výstupní velikost je stejná jako vstupní – jak se očekává při pokusu o komprimaci náhodných dat.
Pokud místo toho zkusíme soubor, který se opravdu dobře komprimuje:
$ pv -cpterba -N in /dev/zero | gzip | pv -cpterba -N out > /dev/null
out: 2.62MiB 0:00:25 [ 109KiB/s] [ 107KiB/s] [ <=> ]
in: 2.65GiB 0:00:25 [ 110MiB/s] [ 108MiB/s] [ <=> ]
Výstupní velikost je 2,62 MiB, vstup je 2,65 GiB – o 3 řády větší.
Jako vedlejší výhodu, pokud se použije na normální soubor, pv
vám dá odhadovaný čas příjezdu:
$ pv -cpterba -N in debian-8.2.0-amd64-DVD-1.iso | gzip | pv -cpterba -N out > /dev/null
out: 578MiB 0:00:27 [22.1MiB/s] [21.4MiB/s] [ <=> ]
in: 595MiB 0:00:27 [22.1MiB/s] [ 22MiB/s] [==> ] 15% ETA 0:02:25
Obraz DVD Jessie jsou většinou komprimované soubory, takže se nekomprimuje tak dobře, ale dokončení by zabralo další dvě a půl minuty.
Můžete také použít pv -d
k monitorování již běžícího procesu – pokud to použijete na běžící kompresor, řekne vám, kde se nachází na vstupním vs. výstupním souboru, což vám opět umožní rychle vidět poměr:
$ pv -pterba -d "$(pidof gzip)"
3:/var/tmp/mp3s.tar: 911MiB 0:00:44 [ 20MiB/s] [19.9MiB/s] [> ] 9% ETA 0:07:35
4:/var/tmp/mp3s.tar.gz: 906MiB 0:00:44 [ 20MiB/s] [19.8MiB/s] [ <=> ]
Soubory Tar souborů MP3 se také špatně komprimují.
Poznámka: Mnoho kompresorů pracuje blok po bloku. To je důvod, proč můžete vidět věci, jako je rychlost přenosu prudce, pak je 0, opakujte. Než získáte skutečnou představu o očekávaném poměru, musíte nechat kompresor chvíli běžet. Mějte na paměti, že hned po špičce se pravděpodobně čte v bloku, ale ještě není zapsána komprimovaná verze – ale pokud jste již čekali přes 10 bloků, je to maximálně 10% chyba.
Související:Co dělá program, když je odeslán signál SIGKILL?
(Možnosti pv, které používám:-p
pro zapnutí ukazatele průběhu; -t
zapnout uplynulý čas; -e
zapnout ETA; -r
zobrazit přenosovou rychlost; -b
zapnout počítadlo bajtů; -c
vytvořit více pv
s v potrubí; -N
pro nastavení štítků).