Je voudrais ajouter une barre de progression à cette ligne de commande:
pv -cN orig < foo.tar.bz2 | bzcat | pv -cN bzcat | gzip -9 | pv -cN gzip > foo.tar.gz
3 Réponses :
C'est la première fois que j'ai jamais entendu parler de La première ligne vous donne une matrice de fichiers afin que vous puissiez ensuite utiliser Je ne vois pas de moyen de dire Pour obtenir en outre progresser sur un seul fichier, vous pourriez avoir besoin de quelque chose comme: p> PV code> et ce n'est pas sur une machine que j'ai accès mais en supposant que cela doit connaître un total au démarrage, puis un numéro sur chaque itération de Commande, vous pouvez faire quelque chose comme ça pour obtenir une barre de progression par fichier traitée:
"$ {# # fichiers [@]} " code> pour fournir
pv code> sa valeur totale initiale (on dirait que vous utilisez
-s valeur code> pour ça?) Et ensuite faire ce que vous faites normalement Pour obtenir des progrès alors que chaque fichier est traité. p>
PV code> que le tuyau qu'il lise de la fin est terminé plutôt que de la nouvelle ligne - terminée si Vos fichiers peuvent avoir de nouvelles lignes dans leurs noms, alors vous devez déterminer comment résoudre ce problème. p>
IFS= readarray -d '' files < <(find . -whatever -print0)
printf '%s\n' "${files[@]}" |
pv -s "${#files[@]}" |
xargs -n 1 -I {} sh -c 'pv {} | command'
Merci pour votre réponse. Je vais essayer, mais, de cette façon, je pense que je ne peux voir qu'un seul projet de travail à l'heure. Droite? PV (Viewer de tuyau) est très fréquent sur le système Debian / Ubuntu. ivarch.com/programs/pv.shtml
Si je comprends ce que PV code> est correctement, vous obtiendrez 2 barres d'état, l'une du premier appel à
PV code> Toute le statut de suivi de tous les fichiers que chaque fichier est ouvert et le Autre à partir du deuxième appel à
PV Code> C'est le statut de suivi dans chaque fichier comme chaque octet / ligne / quel que soit le fichier dans ce fichier est lu. Meilleure chose, c'est pour vous d'essayer et de voir.
Merci à Max C., j'ai trouvé une solution pour la question principale: mais ce ne fonctionne que pour les fichiers GZ et BZ, je dois maintenant développer pour utiliser différents outils en fonction de extension. P> Je vais aussi essayer la solution ED. P> p>
Merci à Ed et Max C., ici la vérification 0.2 Cette version fonctionne avec ZGREP, mais pas avec LZGREP. : - \
#!/bin/bash echo -n "collecting dump... " IFS= readarray -d '' files < <(find . \( -iname "*.bz" -o -iname "*.gz" \) -print0) echo done echo "Calculating archives size..." tot=0 for line in "${files[@]}"; do s=$(stat -c\%s "$line") if [ ! -z "$s" ] then tot=$(($tot+$s)) fi done (for line in "${files[@]}"; do s=$(stat -c\%s "$line") if [ ! -z "$s" ] then echo "$line" fi done ) | xargs -i{} sh -c 'echo Processing file: "{}" 1>&2 ; cat "{}"' | pv -s $tot | zgrep -a anything -