J'ai quelques gros fichiers que j'aimerais compresser. Je peux le faire avec par exemple
tar cvfj big-files.tar.bz2 folder-with-big-files
Le problème est que je ne vois aucun progrès, alors je ne sais pas combien de temps cela va prendre ou quoi que ce soit du genre. En utilisant, v
je peux au moins voir quand chaque fichier est terminé, mais lorsque les fichiers sont petits et volumineux, ce n'est pas le plus utile.
Existe-t-il un moyen d'obtenir de la goudron pour afficher des progrès plus détaillés? Par exemple, un pourcentage effectué ou une barre de progression, ou le temps estimé ou quelque chose. Soit pour chaque fichier, soit tous les fichiers, soit les deux.
pv $FILE.tgz | tar xzf - -C $DEST_DIR
tar cf - /folder-with-big-files -P | pv -s $[$(du -sk /folder-with-big-files | awk '{print $1}') * 1024] | gzip > big-files.tar.gz
Sans ce changement, j’obtenais-bash: syntax error near unexpected token ')'
Vous pouvez utiliser pv pour y parvenir. Pour signaler correctement les progrès,
pv
vous devez savoir combien d'octets vous lui envoyez. La première étape consiste donc à calculer la taille (en kilo-octets). Vous pouvez également supprimer complètement la barre de progression et laisser simplementpv
vous dire combien d'octets il a vus; il signalerait un "fait que beaucoup et que rapide".Puis:
la source
pv
ne semble pas venir avec Mac OS X, mais va essayer ceci une fois que j'ai un ordinateur avec MacPorts dessus. Pourriez-vous expliquer ce que vous faites là? Pas tout à fait sûr de ce que la première ligne fait exactement.SIZE=$(($SIZE * 1000 / 1024))
- Je ne sais pas s’il s’agit ou non d’une bizarrerie sur ma plate-forme particulière, je ne l’ajoute donc pas à la réponse:du
renvoie la taille où 1 Ko = 1024 octets, alors qu’ilpv
semble s’attendre à 1 Ko = 1000 octets. (Je suis sur Ubuntu 10.04)du
à utiliser votre taille de bloc préférée, par exempledu -s --block-size=1000
, ou simplement travailler avec des octets en clair, par exemple, en supprimant lek
s de l' appeldu
etpv
. Néanmoins, je m'attendrais à ce que les deux utilisent à1024
moins d'indication contraire, par exemple, l'--si
activationdu
, par exemple.du -sb
etpv -s
sans aucun modificateur). cela devrait mettre fin à toute confusion.meilleure barre de progression ..
la source
Consultez les options
--checkpoint
et--checkpoint-action
dans la page d’informations tar (comme pour ma distribution, la description de ces options ne se trouve pas dans la page de manuel → RTFI).Voir https://www.gnu.org/software/tar/manual/html_section/tar_26.html
Avec ceux-ci (et peut-être la fonctionnalité pour écrire votre propre commande de point de contrôle), vous pouvez calculer un pourcentage…
la source
tar
spécifique à GNU .Inspiré par la réponse de l'assistant
Une autre façon est d'utiliser les
tar
options nativesle résultat est comme
un exemple complet ici
la source
Utiliser uniquement du goudron
tar
a la possibilité (depuis la v1.12) d’imprimer les informations d’état sur les signaux en utilisant--totals=$SIGNO
, par exemple:Les
Total bytes written: [...]
informations sont imprimées sur chaque signal USR1, par exemple:La source:
la source
Je viens de remarquer le commentaire sur MacOS, et même si je pense que la solution de @akira (et pv) est beaucoup plus pratique, je me suis dit que je poursuivrais un pressentiment et une lecture rapide dans ma boîte MacOS avec du goudron et que je lui enverrais un signal SIGINFO. Curieusement, cela a fonctionné :) si vous utilisez un système de type BSD, cela devrait fonctionner, mais sous Linux, vous devrez peut-être envoyer un SIGUSR1 et / ou
tar
ne pas fonctionner de la même manière.L'inconvénient est qu'il ne vous fournira qu'un résultat (sur stdout) vous indiquant la distance parcourue par le fichier actuel, car je suppose qu'il n'a aucune idée de la taille du flux de données qu'il reçoit.
Donc, oui, une autre approche consisterait à utiliser du goudron et à lui envoyer périodiquement des SIGINFO à tout moment pour savoir dans quelle mesure il se trouve. Comment faire ça?
L'approche ad hoc et manuelle
Si vous voulez pouvoir vérifier le statut sur une base ad-hoc, vous pouvez cliquer
control-T
(comme mentionné par Brian Swift) dans la fenêtre appropriée qui enverra le signal SIGINFO. Un problème avec cela est qu'il l'enverra à toute votre chaîne, je crois, alors si vous faites:Vous verrez également bzip2 signaler son statut avec tar:
Cela fonctionne bien si vous voulez juste vérifier si
tar
votre course est bloquée ou tout simplement lente. Dans ce cas, vous n'avez probablement pas besoin de trop vous soucier du formatage, car il ne s'agit que d'une vérification rapide.Le genre d'approche automatisée
Si vous savez que cela va prendre un certain temps, mais que vous souhaitez un indicateur de progression, vous pouvez également lancer votre processus tar et, dans un autre terminal, déterminer son PID, puis l'envoyer dans un script qui envoie à plusieurs reprises un signal. . Par exemple, si vous avez le scriptlet suivant (et l'invoquez par exemple
script.sh PID-to-signal interval-to-signal-at
):Si vous l'appelez de cette façon, puisque vous ne ciblez que
tar
vous obtiendrez une sortie plus semblable à celle-ci.ce que j'avoue, c'est un peu joli.
Dernier point mais non le moindre - mon script est un peu rouillé, donc si quelqu'un veut y aller et nettoyer / corriger / améliorer le code, poursuivez votre vie :)
la source
tar
lecontrol-T
lancez sur la ligne de commande, le fait de le taper lui enverra un SIGINFO. Si cela était dans un script, ce serait fait aveckill -INFO pid
control-T
, je me suis clairement habitué à spammer trop de fenêtres de la console pour mon bien ..kill -l
Inspiré par la réponse de Noah Spurrier
La source
la source
Si vous connaissez le numéro de fichier au lieu de la taille totale de tous:
Une alternative (moins précise mais appropriée) consiste à utiliser l'option -l et à envoyer dans le pipe unix les noms de fichiers au lieu du contenu des données.
Ayons des fichiers 12345 dans mydir , la commande est la suivante:
vous pouvez connaître cette valeur à l'avance (à cause de votre cas d'utilisation) ou utiliser une commande telle que find + wc pour la découvrir:
la source
tar cfvz ~/mytarfile.tgz . | pv -s $(find . | wc -l) -l > /dev/null
. Est-ce que ça marche pour toi?Méthode basée sur tqdm :
la source
Sous macOS , assurez-vous d’abord que toutes les commandes sont disponibles, puis installez celles qui manquent (par exemple
pv
) à l’aide de Brew .Si vous voulez seulement
tar
sans compression , allez avec:Si vous voulez compresser , allez avec:
la source
Voici quelques chiffres d’une sauvegarde prometheus (métriques) sur Debian / buster AMD64:
Annulé ce travail car il n'y avait pas assez d'espace disque disponible.
Expérimenter avec
zstd
comme compresseur pourtar
suivre l’avancement en utilisantpv
:la source