PV (индикатор выполнения) и GZIP


10

Почему это невозможно?

pv ${dest_file} | gzip -1

pv это индикатор выполнения

ошибка

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%

Это работает

pv ${file_in} | tar -Jxf - -C /outdir

1
что ты пытаешься достичь? Вы читали документы pvи gzipкоманды?
Jakuje

Ответы:


24

То, что вы пытаетесь достичь, это увидеть индикатор процесса сжатия. Но это невозможно, используя pv. Он показывает только прогресс передачи, которого вы можете достичь чем-то вроде этого (в любом случае, это первая ссылка в Google):

pv input_file | gzip > compressed_file

Индикатор выполнения будет работать быстро, а затем будет ожидать сжатия, которое больше не наблюдается при использовании pv.

Но вы можете сделать это наоборот и посмотреть поток вывода, но здесь вы не сможете увидеть фактический прогресс, потому pvчто не знаете фактический размер сжатого файла:

gzip input_file | pv > compressed_file

Лучшее, что я нашел на данный момент, это та, что из commandlinefu, даже с ограничением скорости и сжатием каталогов:

$D=directory
tar pcf - $D | pv -s $(du -sb $D | awk '{print $1}') --rate-limit 500k | gzip > target.tar.gz

индикатор выполнения не работает сgzip input_file | pv > compressed_file
clarkk

это так, но он не знает полный размер сжатого файла, поэтому он просто сканирует из стороны в сторону. Первый, вероятно, лучше.
Jakuje

Индикатор не работает быстро для меня.
mikezter

gzip -cтребуется отправить вывод на стандартный вывод, чтобы разрешить его передачу pv, в противном случае индикатор выполнения не будет работать, так как данные не поступают pv :)
Дэвид Гарднер,

Спасибо за совет! Вы также можете достичь этого с помощью чего-то вроде mysqldump ... | gzip | pv > output.sql.gz.
Джевон

4

Да, это возможно, используя строки файла, а не байты. Вы получаете достаточно точный индикатор выполнения:

cat input_file | pv -ls $( wc -l input_file ) | gzip -c -- > compressed_file

1

Вы можете использовать 7z вместо этого, чтобы получить процент прогресса:

$ 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   
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.