GNU/Linux >> Belajar Linux >  >> Linux

Program Kompresi Menampilkan Rasio Kompresi Langsung?

Beberapa program kompresi dapat menampilkan informasi (seperti rasio kompresi atau total waktu dan ukuran) saat melakukan tugas, seperti xz -v :

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

Saat mengompresi file besar, saya ingin mengetahui rasio kompresi di tengah tugas, sehingga saya dapat menghentikan proses jika rasio kompresi rendah dan membiarkannya tidak terkompresi.

Apakah ada program lain dengan fitur ini? (xz memiliki rasio kompresi tinggi tetapi lambat)

Jawaban yang Diterima:

Cara umum untuk melakukannya adalah dengan menggunakan sesuatu seperti pv untuk memantau ukuran input dan output dari program kompresi. Misalnya :

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

Cukup mudah untuk melihat di atas bahwa ukuran output sama dengan ukuran input—seperti yang diharapkan saat mencoba mengompresi data acak.

Jika sebaliknya, kami mencoba file yang terkompresi dengan sangat baik:

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

Ukuran outputnya adalah 2,62MiB, inputnya adalah 2,65GiB—3 kali lipat lebih besar.

Sebagai keuntungan sampingan, jika digunakan pada file biasa, pv akan memberi Anda 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

Gambar DVD Jessie sebagian besar adalah file terkompresi, sehingga tidak terkompresi dengan baik, tetapi perlu dua setengah menit lagi untuk menyelesaikannya.

Anda juga dapat menggunakan pv -d untuk memantau proses yang sudah berjalan—jika Anda menerapkannya pada kompresor yang sedang berjalan, ini akan memberi tahu Anda di mana letaknya pada file input vs. output, sekali lagi memungkinkan Anda melihat rasio dengan cepat:

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

File tar MP3 juga tidak terkompresi dengan baik.

Catatan: Banyak kompresor bekerja berdasarkan blok demi blok. Itu sebabnya Anda mungkin melihat hal-hal seperti lonjakan kecepatan transfer kemudian menjadi 0, ulangi. Anda perlu membiarkan kompresor berjalan sebentar sebelum Anda bisa mendapatkan gambaran nyata tentang rasio yang diharapkan. Perlu diingat bahwa tepat setelah lonjakan, itu mungkin dibaca dalam satu blok, tetapi belum ditulis dalam versi terkompresi—tetapi jika Anda sudah menunggu hingga 10 blok, itu adalah kesalahan paling banyak 10%.

Terkait:Apa yang dilakukan suatu program ketika mengirim sinyal SIGKILL?

(Opsi pv yang saya gunakan:-p untuk mengaktifkan bilah kemajuan; -t untuk mengaktifkan waktu yang telah berlalu; -e untuk mengaktifkan ETA; -r untuk menunjukkan tingkat transfer; -b untuk mengaktifkan penghitung byte; -c untuk membuat beberapa pv s dalam pekerjaan pipa; -N untuk mengatur label).


Linux
  1. Melacak Program?

  2. Mengapa Cd Bukan Program?

  3. Daftar File yang Diakses Oleh Program?

  1. Jalankan program java di backend

  2. Dukungan multithread di 7za

  3. Unduhan CentOS Live CD vs Live DVD

  1. Modul kernel Linux kita tidak bisa hidup tanpanya

  2. Bahasa Pemrograman C - Pendahuluan

  3. Mengukur Penggunaan Ram Suatu Program?