Я шукаю спосіб фільтрувати / перенаправляти вихід rsync таким чином, щоб його можна було подати до команди "dialog --gauge", так що я можу отримати гарну панель прогресу під час синхронізації файлів. Наразі я тестував це лише безпосередньо під час підказки, але я планую це зробити в сценарії (bash) оболонки.
Я роздивився Інтернет та знайшов шматочки та шматочки, але все ще щось мені не вистачає, щоб він працював
(Відмова: Це може бути абсолютно неправильним підходом, і це жахливість переспрямування / трубопроводу)
Що я зараз склав:
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 та використовують наступний фільтр 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
Наскільки я знаю, "діалог - покажчик" і т. Д. Повинен прийняти це, але він показує, що прогрес буде 0%, поки раптом не досягне 100%
Чи може хтось вказати мене в потрібному напрямку? Я далеко від робочої панелі прогресу? Чи є кращий спосіб досягти цього?
З повагою,
Крістер
EDIT : Після врахування відповіді @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