pv (pasek postępu) i gzip

10

Dlaczego to nie jest możliwe?

pv ${dest_file} | gzip -1

pv to pasek postępu

błąd

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%

To działa

pv ${file_in} | tar -Jxf - -C /outdir
clarkk
źródło
1
Co próbujesz osiągnąć? Czy czytałeś dokumenty pvi gzippolecenia?
Jakuje

Odpowiedzi:

24

To, co próbujesz osiągnąć, to zobaczyć pasek postępu procesu kompresji. Ale nie jest możliwe użycie pv. Pokazuje tylko postęp transferu, który można osiągnąć przez coś takiego (w każdym razie jest to pierwszy link w Google):

pv input_file | gzip > compressed_file

Pasek postępu będzie działał szybko, a następnie będzie czekał na kompresję, której nie można już zaobserwować pv.

Ale możesz to zrobić w drugą stronę i obejrzeć strumień wyjściowy, tutaj nie zobaczysz rzeczywistego postępu, ponieważ pvnie znasz rzeczywistego rozmiaru skompresowanego pliku:

gzip input_file | pv > compressed_file

Najlepsze, jakie do tej pory znalazłem, to ten z linii poleceń, nawet z ograniczaniem szybkości i kompresją katalogów:

$D=directory
tar pcf - $D | pv -s $(du -sb $D | awk '{print $1}') --rate-limit 500k | gzip > target.tar.gz
Jakuje
źródło
pasek postępu nie działa zgzip input_file | pv > compressed_file
clarkk
tak jest, ale nie zna całego rozmiaru skompresowanego pliku, więc po prostu skanuje z boku na bok. Pierwszy jest prawdopodobnie lepszy.
Jakuje
Pasek postępu nie działa dla mnie szybko.
Mikezter,
1
gzip -cwymagane jest, aby wysłać dane wyjściowe do stdout aby mogła ona zostać przekazane pv, w przeciwnym razie pasek postępu nie będzie działać, ponieważ nie ma danych zamiar pv :)
David Gardner
Dzięki za wskazówkę! Możesz to również osiągnąć za pomocą czegoś takiego mysqldump ... | gzip | pv > output.sql.gz.
jevon
4

Tak, jest to trochę możliwe przy użyciu wierszy pliku, a nie bajtów. Otrzymujesz wystarczająco dokładny pasek postępu:

cat input_file | pv -ls $( wc -l input_file ) | gzip -c -- > compressed_file
Archanioł
źródło
1

Zamiast tego możesz użyć 7z, aby uzyskać procentowy postęp:

$ 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
źródło