0
votes

Trouver et grep / zgrep / lzgrep Barre de progression

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 


0 commentaires

3 Réponses :


1
votes

C'est la première fois que j'ai jamais entendu parler de 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: xxx pré>

La première ligne vous donne une matrice de fichiers afin que vous puissiez ensuite utiliser "$ {# # 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>

Je ne vois pas de moyen de dire 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>

Pour obtenir en outre progresser sur un seul fichier, vous pourriez avoir besoin de quelque chose comme: p>

IFS= readarray -d '' files < <(find . -whatever -print0)
printf '%s\n' "${files[@]}" |
    pv -s "${#files[@]}" |
    xargs -n 1 -I {} sh -c 'pv {} | command'


2 commentaires

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 est correctement, vous obtiendrez 2 barres d'état, l'une du premier appel à PV Toute le statut de suivi de tous les fichiers que chaque fichier est ouvert et le Autre à partir du deuxième appel à PV 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.



0
votes

Merci à Max C., j'ai trouvé une solution pour la question principale: xxx

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.

Je vais aussi essayer la solution ED.


0 commentaires

0
votes

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 -


0 commentaires