Saya mencari cara untuk memfilter / mengarahkan ulang output rsync dengan cara di mana ia dapat diumpankan ke perintah "dialog --gauge", jadi saya bisa mendapatkan progressbar yang tampak bagus selama sinkronisasi file. Saat ini saya hanya mengujinya secara langsung di prompt, tapi saya berencana untuk melakukan ini dalam skrip shell (bash).
Saya telah mencari di internet dan menemukan potongan-potongan, tapi saya masih kehilangan sesuatu untuk membuatnya bekerja
(Penafian: Ini mungkin pendekatan yang benar-benar salah, dan merupakan redstant / piping monstrosity)
Apa yang saat ini saya kumpulkan:
rsync -avz --progress -e "ssh" user@server:/home/user/data/ /home/user/data | awk -f /home/user/rsync.awk | sed 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70
Pertama saya memiliki perintah rsync aktual dengan opsi --progress Output dari rsync disalurkan ke awk dan menggunakan filter followng awk:
{
if (index($0, "to-check=") > 0)
{
split($0, pieces, "to-check=")
split(pieces[2], term, ")");
split(term[1], division, "/");
print (1-(division[1]/division[2]))*100
}
# else
# {
# print "#"$0;
# }
fflush();
}
Ini menyaring keluaran rsync dan memberikan persentase dalam format berikut:
53.7037
55.5556
57.4074
59.2593
61.1111
62.963
Jadi untuk menghilangkan angka desimal, saya memberi makan output ke sed:
sed 's/\([0-9]*\).*/\1/'
Yang menghasilkan output sebagai berikut:
64
66
68
70
72
74
75
77
Angka-angka itu disalurkan ke dialog seperti ini:
dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70
Sejauh yang saya tahu, "dialog --gauge" dll harus menerima ini, tetapi hanya menampilkan kemajuan menjadi 0% sampai tiba-tiba mencapai 100%
Bisakah seseorang mengarahkan saya ke arah yang benar di sini? Apakah saya jauh dari progressbar yang berfungsi? Apakah ada cara yang lebih baik untuk mencapai ini?
Salam,
Christer
EDIT : Setelah memperhitungkan jawaban @lynxlynxlynx, baris perintah yang benar adalah:
rsync -avz --progress -e "ssh" user@server:/home/user/data/ /home/user/data \
| awk -f /home/user/rsync.awk \
| sed --unbuffered 's/([0-9]*).*/\1/' \
| dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70