pv (progress bar) dan gzip

10

Mengapa ini tidak mungkin?

pv ${dest_file} | gzip -1

pv adalah bilah kemajuan

kesalahan

gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h
   0 B 0:00:00 [   0 B/s] [>                                   ]  0%

Ini bekerja

pv ${file_in} | tar -Jxf - -C /outdir
clarkk
sumber
1
apa yang ingin kamu capai? Apakah Anda membaca do docs of pvand gzipcommand?
Jakuje

Jawaban:

24

Apa yang ingin Anda capai adalah melihat bilah progres proses kompresi. Tetapi tidak mungkin menggunakan pv. Ini hanya menunjukkan kemajuan transfer, yang dapat Anda capai dengan sesuatu seperti ini (bagaimanapun, ini adalah tautan pertama di google):

pv input_file | gzip > compressed_file

Bilah progres akan berjalan cepat, dan kemudian akan menunggu kompresi, yang tidak dapat diamati lagi menggunakan pv.

Tetapi Anda dapat melakukannya dengan cara lain dan melihat aliran output, bot di sini Anda tidak akan dapat melihat kemajuan aktual, karena pvtidak tahu ukuran sebenarnya dari file yang dikompresi:

gzip input_file | pv > compressed_file

Yang terbaik yang saya temukan sejauh ini adalah dari commandlinefu bahkan dengan pembatasan tingkat dan kompresi direktori:

$D=directory
tar pcf - $D | pv -s $(du -sb $D | awk '{print $1}') --rate-limit 500k | gzip > target.tar.gz
Jakuje
sumber
bilah kemajuan tidak bekerja dengangzip input_file | pv > compressed_file
clarkk
itu, tetapi tidak tahu seluruh ukuran file terkompresi sehingga hanya memindai dari sisi ke sisi. Yang pertama mungkin lebih baik.
Jakuje
Bilah progres tidak berjalan cepat untuk saya.
mikezter
gzip -cdiperlukan untuk mengirim output ke stdout agar dapat diteruskan pv, jika tidak, bilah progres tidak akan berfungsi karena tidak ada data yang masuk pv :)
David Gardner
Terima kasih atas tipnya! Anda juga dapat mencapai ini dengan sesuatu seperti mysqldump ... | gzip | pv > output.sql.gz.
jevon
4

Ya, agak mungkin menggunakan baris file, bukan byte. Anda mendapatkan bilah kemajuan yang cukup akurat:

cat input_file | pv -ls $( wc -l input_file ) | gzip -c -- > compressed_file
Malaikat Tertinggi
sumber
1

Anda dapat menggunakan 7z sebagai gantinya untuk mendapatkan persentase kemajuan:

$ 7z a spaCy.tar.gz spaCy.tar 

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz (906E9),ASM,AES-NI)

Open archive: spaCy.tar.gz
--
Path = spaCy.tar.gz
Type = gzip
Headers Size = 20

Scanning the drive:
1 file, 326451200 bytes (312 MiB)

Updating archive: spaCy.tar.gz

Items to compress: 1

 32% U spaCy.tar   
qwr
sumber