Hanya memperhatikan komentar tentang MacOS, dan sementara saya pikir solusi dari @akira (dan pv) jauh lebih rapi saya pikir saya akan mengejar firasat dan playaround cepat di kotak MacOS saya dengan tar dan mengirimkannya sinyal SIGINFO. Lucunya, itu berhasil :) jika Anda menggunakan sistem mirip-BSD, ini seharusnya bekerja, tetapi pada kotak Linux, Anda mungkin perlu mengirim SIGUSR1, dan / atau tar
mungkin tidak bekerja dengan cara yang sama.
Sisi buruknya adalah ia hanya akan memberi Anda output (on stdout) yang menunjukkan seberapa jauh file saat ini karena saya kira tidak tahu seberapa besar aliran data yang didapat.
Jadi ya, pendekatan alternatif adalah menjalankan tar dan secara berkala mengirimkannya SIGINFO kapan pun Anda ingin tahu seberapa jauh jaraknya. Bagaimana cara melakukannya?
Ad-hoc, pendekatan manual
Jika Anda ingin dapat memeriksa status berdasarkan ad-hoc, Anda dapat menekan control-T
(seperti yang disebutkan Brian Swift) di jendela yang relevan yang akan mengirimkan sinyal SIGINFO. Satu masalah dengan itu adalah itu akan mengirimkannya ke seluruh rantai Anda, saya percaya, jadi jika Anda melakukannya:
% tar cvf - folder-with-big-files | bzip2 -c > big-files.tar.bz2
Anda juga akan melihat bzip2 melaporkan statusnya bersama dengan 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)
Ini berfungsi baik jika Anda hanya ingin memeriksa apakah tar
Anda sedang berjalan macet, atau hanya lambat. Anda mungkin tidak perlu terlalu khawatir tentang memformat masalah dalam kasus ini, karena ini hanya pemeriksaan cepat ..
Jenis pendekatan otomatis
Jika Anda tahu itu akan memakan waktu, tetapi ingin sesuatu seperti indikator kemajuan, alternatifnya adalah menjalankan proses tar Anda dan di terminal lain berhasil PID dan kemudian membuangnya ke dalam skrip yang baru saja mengirim sinyal berulang kali . Misalnya, jika Anda memiliki skrip berikut (dan aktifkan seperti kata 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?"
Jika Anda memintanya seperti ini, karena Anda hanya menargetkan, tar
Anda akan mendapatkan hasil lebih seperti ini
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)
...
yang saya akui, agak cantik.
Last but not least - skrip saya agak berkarat, jadi jika ada yang ingin masuk dan membersihkan / memperbaiki / meningkatkan kode, pergi untuk hidup Anda :)