ฉันกำลังมองหาวิธีในการกรอง / เปลี่ยนเส้นทาง rsync ในลักษณะที่สามารถป้อนไปยังคำสั่ง "dialog --gauge" ดังนั้นฉันสามารถดูแถบความคืบหน้าที่ดีในระหว่างการซิงค์ไฟล์ ขณะนี้ฉันเพิ่งทดสอบโดยตรงที่พร้อมท์ แต่ฉันวางแผนที่จะทำในเชลล์สคริปต์ (ทุบตี)
ฉันดูรอบ ๆ อินเทอร์เน็ตและพบบิตและชิ้นส่วน แต่ฉันก็ยังขาดอะไรบางอย่างที่จะทำให้มันใช้งานได้
(ข้อจำกัดความรับผิดชอบ: นี่อาจเป็นวิธีที่ผิดโดยสิ้นเชิงและเป็นการเปลี่ยนเส้นทาง / การวางท่อที่น่าตกใจ)
สิ่งที่ฉันได้รวบรวม:
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
ก่อนอื่นฉันมีคำสั่ง rsync จริงด้วย --progress ตัวเลือกเอาต์พุตจาก rsync ถูกไพพ์ไปที่ awk และใช้ตัวกรอง 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();
}
สิ่งนี้จะกรองเอาท์พุท rsync และให้เปอร์เซ็นต์ในรูปแบบต่อไปนี้:
53.7037
55.5556
57.4074
59.2593
61.1111
62.963
ดังนั้นเพื่อกำจัดตัวเลขทศนิยมฉันป้อนผลลัพธ์ไปยัง sed:
sed 's/\([0-9]*\).*/\1/'
ซึ่งให้ผลลัพธ์ต่อไปนี้:
64
66
68
70
72
74
75
77
ตัวเลขเหล่านั้นถูกส่งเข้าสู่การสนทนาเช่นนี้:
dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70
เท่าที่ฉันรู้ "dialog --gauge" เป็นต้นควรยอมรับสิ่งนี้ แต่เพียงแสดงความคืบหน้าเป็น 0% จนกว่าจะถึง 100% ทันที
ใครบางคนชี้ให้ฉันในทิศทางที่ถูกต้องที่นี่? ฉันอยู่ห่างไกลจากแถบความคืบหน้าการทำงานหรือไม่? มีวิธีที่ดีกว่าในการบรรลุเป้าหมายนี้หรือไม่?
ความนับถือ,
Christer
แก้ไข : หลังจากคำตอบ @lynxlynxlynx 'เข้าบัญชีบรรทัดคำสั่งที่ถูกต้องคือ:
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