MacOS hakkındaki yorumu farkettim ve @akira (ve pv) 'nin çözümünün çok daha temiz olduğunu düşündüğümde, MacOS kutumda bir hunk ve hızlı bir boşluk bırakıp tar ile bir SIGINFO sinyali gönderiyorum. İşin aslı , işe yaradı :) :) BSD benzeri bir sistemdeyseniz, bunun çalışması gerekir , ancak bir Linux kutusunda bir SIGUSR1 göndermeniz tar
gerekebilir ve / veya aynı şekilde çalışmayabilir.
Aşağı tarafı, size sadece mevcut dosyadan ne kadar uzakta olduğunu gösteren veri akışını (stdout'ta) gösterecek olması, veri akışının ne kadar büyük olduğu hakkında hiçbir fikrinin olmadığını tahmin ediyorum.
Yani evet, alternatif bir yaklaşım katranı ateşlemek ve ne kadar ileri gittiğini bilmek istediğinizde periyodik olarak SIGINFO'lar göndermek olacaktır. Bu nasıl yapılır?
Geçici, manuel yaklaşım
Durumu geçici olarak kontrol edebilmek istiyorsanız control-T
, ilgili pencerede SIGINFO sinyalini gönderecek olan pencerede (Brian Swift'in bahsettiği gibi) vurabilirsiniz. Bununla ilgili bir sorun, bunu yaptığım tüm zincirinize gönderecek, yani yapıyorsanız:
% tar cvf - folder-with-big-files | bzip2 -c > big-files.tar.bz2
Ayrıca bzip2 raporunu tar ile birlikte durumunu da göreceksiniz:
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)
Bu tar
, sadece çalıştığınızın sıkışıp kaldığını veya sadece yavaş olup olmadığını kontrol etmek istiyorsanız iyi çalışır. Muhtemelen bu durumda sorunları biçimlendirme konusunda çok fazla endişelenmenize gerek yok, çünkü bu sadece hızlı bir kontrol.
Otomatik yaklaşımın türü
Bir süre alacağını biliyorsanız, ancak bir ilerleme göstergesi gibi bir şey istiyorsanız, alternatif bir tar işleminizi başlatmak ve başka bir terminalde PID'sini çıkarmak ve sonra tekrar tekrar bir sinyal gönderen bir komut dosyasına atmak olacaktır. . Örneğin, aşağıdaki komut dosyasını kullanıyorsanız (ve söylediği gibi çağırın 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?"
Bu şekilde çağırırsanız, yalnızca hedeflediğiniz için, buna tar
benzer bir çıktı elde edersiniz.
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)
...
ki kabul ediyorum, çok hoş.
Son fakat en az değil - senaryolarım biraz paslanmış, bu yüzden birisi içeri girip kodu temizlemek / düzeltmek / iyileştirmek istiyorsa, hayatınız için gidin :)