GNU/Linux >> Znalost Linux >  >> Linux

Kompresní program zobrazuje živý kompresní poměr?

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ů).


Linux
  1. Sledování programů?

  2. Proč není CD program?

  3. Podpora více vláken v 7za

  1. Programovací jazyk C - Úvod

  2. CentOS Live CD vs Live DVD ke stažení

  3. Vytvoření programu v přihrádce

  1. Seznam souborů, ke kterým program přistupuje?

  2. Měření využití Ram programu?

  3. Spusťte Java program v backendu