Sto cercando un modo per filtrare / reindirizzare l'output di rsync in un modo in cui possa essere inviato al comando "dialog --gauge", così posso ottenere una barra di avanzamento gradevole durante la sincronizzazione dei file. Attualmente l'ho provato solo direttamente al prompt, ma ho intenzione di farlo in uno script di shell (bash).
Mi sono guardato intorno su Internet e ho trovato pezzi, ma mi manca ancora qualcosa per farlo funzionare
(Dichiarazione di non responsabilità: questo potrebbe essere un approccio totalmente sbagliato, ed è una mostruosità di reindirizzamento / connessione)
Quello che ho attualmente messo insieme:
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
Per prima cosa ho l'attuale comando rsync con l'opzione --progress L'output di rsync viene reindirizzato in awk e utilizza il seguente filtro 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();
}
Questo filtra l'output di rsync e fornisce la percentuale nel seguente formato:
53.7037
55.5556
57.4074
59.2593
61.1111
62.963
Quindi, per sbarazzarmi dei numeri decimali, invio l'output a sed:
sed 's/\([0-9]*\).*/\1/'
Che dà il seguente risultato:
64
66
68
70
72
74
75
77
Quei numeri vengono inseriti in una finestra di dialogo in questo modo:
dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70
Per quanto ne so, "dialog --gauge" ecc. Dovrebbe accettarlo, ma mostra solo che i progressi sono dello 0% fino a quando non raggiunge improvvisamente il 100%
Qualcuno può indicarmi la giusta direzione qui? Sono lontano da una barra di avanzamento funzionante? C'è un modo migliore per raggiungere questo obiettivo?
Saluti,
Christer
EDIT : dopo aver preso in considerazione la risposta di @lynxlynxlynx, la riga di comando corretta è:
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