ただ、MacOSのについてのコメントを気づいた、と私は@akira(およびPV)からの解決策を考えている間されてずっとすっきり私は勘とタールと私のMacOSのボックス内の迅速なplayaroundを追いかけ、それにSIGINFO信号を送信しようと思いました。おもしろいことに、それは動作しました:) BSDのようなシステムを使用している場合、これは動作するはずですが、Linuxボックスでは、SIGUSR1を送信する必要tar
があるかもしれません。
欠点は、取得するデータストリームの大きさがわからないと推測しているため、現在のファイルがどれだけ遠くにあるかを示す出力(stdout)のみを提供することです。
そのため、別の方法として、tarを起動し、どこまで到達したかを知りたいときにSIGINFOを定期的に送信します。これを行う方法?
アドホックな手動アプローチ
アドホックベースでステータスを確認したい場合control-T
は、関連するウィンドウで(Brian Swiftが述べたように)ヒットすると、SIGINFOシグナルが送信されます。それに関する1つの問題は、私が信じているあなたのチェーン全体にそれを送るということです。
% tar cvf - folder-with-big-files | bzip2 -c > big-files.tar.bz2
また、bzip2のレポートとtarのステータスも表示されます。
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)
これtar
は、実行中の処理が停止しているか、単に遅いかを確認するだけの場合にうまく機能します。この場合、書式設定の問題についてあまり心配する必要はないでしょう。これは簡単なチェックに過ぎないからです。
一種の自動化されたアプローチ
時間がかかることはわかっているが、進行状況インジケーターのようなものが必要な場合は、代わりにtarプロセスを起動し、別のターミナルでPIDを処理してから、繰り返しシグナルを送信するスクリプトにスローする方法があります。 。たとえば、次のスクリプトレットがある場合(およびsayとして呼び出す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?"
この方法で呼び出すと、ターゲットを絞っているだけtar
なので、このような出力が得られます
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)
...
私は認めますが、かなりきれいです。
最後になりましたが、私のスクリプトはちょっとさびているので、誰かがコードを修正/修正/改善したい場合は、あなたの人生に行ってください:)