pv (barre de progression) et gzip

10

Pourquoi n'est-ce pas possible?

pv ${dest_file} | gzip -1

pv est une barre de progression

Erreur

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%

Cela marche

pv ${file_in} | tar -Jxf - -C /outdir
Clarkk
la source
1
qu'essayez-vous d'accomplir? Avez-vous lu do docs of pvand gzipcommand?
Jakuje

Réponses:

24

Ce que vous essayez de réaliser, c'est de voir la barre de progression du processus de compression. Mais ce n'est pas possible d'utiliser pv. Il ne montre que la progression du transfert, ce que vous pouvez réaliser par quelque chose comme ça (de toute façon, c'est le premier lien dans Google):

pv input_file | gzip > compressed_file

La barre de progression s'exécutera rapidement, puis attendra la compression, qui n'est plus observable à l'aide pv.

Mais vous pouvez faire cela dans l'autre sens et regarder le flux de sortie, bot ici, vous ne pourrez pas voir la progression réelle, car pvne connaît pas la taille réelle du fichier compressé:

gzip input_file | pv > compressed_file

Le meilleur que j'ai trouvé jusqu'à présent est celui de commandlinefu même avec la limitation de débit et la compression des répertoires:

$D=directory
tar pcf - $D | pv -s $(du -sb $D | awk '{print $1}') --rate-limit 500k | gzip > target.tar.gz
Jakuje
la source
la barre de progression ne fonctionne pasgzip input_file | pv > compressed_file
clarkk
c'est le cas, mais il ne connaît pas toute la taille du fichier compressé, il scanne donc d'un côté à l'autre. Le premier est probablement meilleur.
Jakuje
La barre de progression ne fonctionne pas rapidement pour moi.
mikezter
gzip -cest requis pour envoyer la sortie à stdout pour permettre sa transmission pv, sinon la barre de progression ne fonctionnera pas car il n'y a pas de données pv :)
David Gardner
Merci pour le conseil! Vous pouvez également y parvenir avec quelque chose comme mysqldump ... | gzip | pv > output.sql.gz.
jevon
4

Oui, c'est un peu possible en utilisant les lignes du fichier, pas les octets. Vous obtenez une barre de progression suffisamment précise:

cat input_file | pv -ls $( wc -l input_file ) | gzip -c -- > compressed_file
Archange
la source
1

Vous pouvez utiliser 7z à la place pour obtenir une progression en pourcentage:

$ 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
la source