GNU/Linux >> Linux Esercitazione >  >> Linux

Programma di compressione che mostra il rapporto di compressione in tempo reale?

Alcuni programmi di compressione possono mostrare informazioni (come il rapporto di compressione o i totali di tempo e dimensione) durante l'esecuzione dell'attività, come xz -v :

--- %   2,580.2 KiB / 6,552.0 KiB = 0.394   1.2 MiB/s       0:05

Durante la compressione di un file di grandi dimensioni, vorrei conoscere il rapporto di compressione a metà dell'attività, in modo da poter interrompere il processo se il rapporto di compressione è basso e lasciarlo non compresso.

Ci sono altri programmi con questa funzione? (xz ha un alto rapporto di compressione ma è lento)

Risposta accettata:

Il modo generico per farlo è usare qualcosa come pv per monitorare sia la dimensione di input che quella di output del programma di compressione. Ad esempio :

$ 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] [                           <=>        ]

È abbastanza facile vedere sopra che la dimensione dell'output è la stessa della dimensione dell'input, come previsto quando si tenta di comprimere dati casuali.

Se invece proviamo un file che si comprime davvero bene:

$ 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] [                   <=>                ]

La dimensione dell'output è 2,62 MiB, l'input è 2,65 GiB:3 ordini di grandezza più grandi.

Come vantaggio collaterale, se utilizzato su un file normale, pv ti darà un ETA:

$ 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

L'immagine del DVD di Jessie è composta principalmente da file compressi, quindi non si comprime molto bene, ma ci vorrebbero altri due minuti e mezzo per essere completata.

Puoi anche usare pv -d per monitorare un processo già in esecuzione:se lo applichi a un compressore in esecuzione, ti dirà dove si trova nel file di input rispetto al file di output, permettendoti di nuovo di vedere rapidamente il rapporto:

$ 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] [                <=>   ] 

Neanche i file tar degli MP3 si comprimono bene.

Nota: Molti compressori funzionano blocco per blocco. Ecco perché potresti vedere cose come il picco della velocità di trasferimento che poi è 0, ripeti. È necessario far funzionare il compressore per un po' prima di poter avere un'idea reale del rapporto atteso. Tieni presente che subito dopo un picco, probabilmente viene letto in un blocco, ma non ancora scritto la versione compressa, ma se hai già aspettato per 10 blocchi, si tratta al massimo di un errore del 10%.

Correlati:cosa fa un programma quando riceve il segnale SIGKILL?

(Le opzioni pv che sto usando:-p per attivare la barra di avanzamento; -t per attivare il tempo trascorso; -e attivare l'ETA; -r per mostrare la velocità di trasferimento; -b per attivare il contatore di byte; -c per creare più pv s in una conduttura; -N per impostare le etichette).


Linux
  1. Tenere traccia dei programmi?

  2. Perché Cd non è un programma?

  3. Elencare i file a cui si accede da un programma?

  4. Misurare l'utilizzo della RAM di un programma?

  5. Programma Python che consuma RAM

5 consigli per padroneggiare Linux

11 comandi Linux di cui non posso fare a meno

Cos'è Bonjour sul mio computer? Guida per PC del programma Bonjour di Windows 10

Creazione di una USB live di Manjaro Linux in Windows e Linux

Come creare Solus OS Live USB

Come abilitare la compressione GZIP in Nginx