Mir ist gerade der Kommentar zu MacOS aufgefallen, und während ich denke, dass die Lösung von @akira (und pv) viel netter ist , dachte ich, ich würde eine Ahnung und einen schnellen Playaround in meiner MacOS-Box mit tar und einem SIGINFO-Signal verfolgen. Merkwürdigerweise hat es funktioniert :) Wenn Sie ein BSD-ähnliches System verwenden, sollte dies funktionieren, aber bei einer Linux-Box müssen Sie möglicherweise eine SIGUSR1 senden und / oder tar
funktionieren möglicherweise nicht auf die gleiche Weise.
Der Nachteil ist, dass Sie nur eine Ausgabe (on stdout) erhalten, die Ihnen zeigt, wie weit die aktuelle Datei ist, da ich vermute, dass sie keine Ahnung hat, wie groß der Datenstrom ist.
Ja, ein alternativer Ansatz wäre, Teer hochzufahren und regelmäßig SIGINFOs zu senden, wann immer Sie wissen möchten, wie weit er gekommen ist. Wie macht man das?
Der Ad-hoc-Ansatz von Hand
Wenn Sie den Status auf Ad-hoc-Basis überprüfen möchten, können Sie control-T
(wie Brian Swift erwähnt) in das entsprechende Fenster klicken, um das SIGINFO-Signal zu senden. Ein Problem dabei ist, dass es an Ihre gesamte Kette gesendet wird, glaube ich, wenn Sie also Folgendes tun:
% tar cvf - folder-with-big-files | bzip2 -c > big-files.tar.bz2
Außerdem wird der Status von bzip2 zusammen mit tar angezeigt:
a folder-with-big-files/big-file.imgload 0.79 cmd: bzip2 13325 running 14 0.27u 1.02s adding folder-with-big-files/big-file.imgload (17760256 / 32311520)
Dies funktioniert gut, wenn Sie nur prüfen möchten, ob tar
Sie laufen oder nur langsam laufen. In diesem Fall müssen Sie sich wahrscheinlich nicht allzu viele Gedanken über Formatierungsprobleme machen, da dies nur eine schnelle Überprüfung ist.
Die Art des automatisierten Ansatzes
Wenn Sie wissen, dass es eine Weile dauern wird, Sie aber etwas wie einen Fortschrittsindikator möchten, besteht die Alternative darin, Ihren Teerprozess abzufeuern und in einem anderen Terminal die PID zu erarbeiten und dann in ein Skript zu werfen, das immer wieder ein Signal sendet . Wenn Sie beispielsweise über das folgende Scriptlet verfügen (und es sozusagen aufrufen script.sh PID-to-signal interval-to-signal-at
):
#!/bin/sh PID=$1 INTERVAL=$2 SIGNAL=29 # excuse the voodoo, bash gets the translation of SIGINFO, # sh won't.. kill -0 $PID # invoke a quick check to see if the PID is present AND that # you can access it.. echo "this process is $$, sending signal $SIGNAL to $PID every $INTERVAL s" while [ $? -eq 0 ]; do sleep $INTERVAL; kill -$SIGNAL $PID; # The kill signalling must be the last statement # or else the $? conditional test won't work done echo "PID $PID no longer accessible, tar finished?"
Wenn Sie es auf diese Weise aufrufen, erhalten Sie tar
eine eher ähnliche Ausgabe, da Sie nur auf Zielgruppen ausgerichtet sind
a folder-with-big-files/tinyfile.1 a folder-with-big-files/tinyfile.2 a folder-with-big-files/tinyfile.3 a folder-with-big-files/bigfile.1 adding folder-with-big-files/bigfile.1 (124612 / 94377241) adding folder-with-big-files/bigfile.1 (723612 / 94377241) ...
was ich zugeben, ist irgendwie hübsch.
Zu guter Letzt - mein Scripting ist irgendwie rostig. Wenn also jemand reinrutschen / den Code bereinigen / verbessern / verbessern möchte, dann mach dein Leben :)