Tôi đang tìm cách để lọc / chuyển hướng đầu ra rsync theo cách có thể được đưa vào lệnh "hộp thoại --gauge", vì vậy tôi có thể có được một thanh tiến trình tìm kiếm đẹp mắt trong quá trình đồng bộ hóa tệp. Hiện tại tôi chỉ thử nghiệm trực tiếp tại dấu nhắc, nhưng tôi dự định thực hiện điều này trong tập lệnh shell (bash).
Tôi đã tìm kiếm trên internet và tìm thấy các mẩu và mảnh, nhưng tôi vẫn còn thiếu một cái gì đó để làm cho nó hoạt động
(Tuyên bố miễn trừ trách nhiệm: Đây có thể là một cách tiếp cận hoàn toàn sai và là một sự quái dị chuyển hướng / đường ống)
Những gì tôi hiện đang đặt cùng nhau:
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
Đầu tiên tôi có lệnh rsync thực tế với tùy chọn --proceed Đầu ra từ rsync được dẫn vào awk và sử dụng bộ lọc awng 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();
}
Điều này lọc ra đầu ra rsync và cung cấp tỷ lệ phần trăm theo định dạng sau:
53.7037
55.5556
57.4074
59.2593
61.1111
62.963
Vì vậy, để loại bỏ các số thập phân, tôi cung cấp đầu ra cho sed:
sed 's/\([0-9]*\).*/\1/'
Cung cấp đầu ra sau:
64
66
68
70
72
74
75
77
Những con số này được dẫn vào hộp thoại như thế này:
dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70
Theo như tôi biết, "hộp thoại --gauge", v.v. nên chấp nhận điều này, nhưng nó chỉ hiển thị tiến độ là 0% cho đến khi nó đột nhiên đạt 100%
Ai đó có thể chỉ cho tôi đi đúng hướng ở đây? Tôi có xa từ một thanh tiến trình làm việc không? Có cách nào tốt hơn để đạt được điều này?
Trân trọng,
Chúa Kitô
EDIT : Sau khi tính đến câu trả lời của @lynxlynxlynx, dòng lệnh chính xác là:
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