Linux

從 rsync 輸出中使用“對話框”製作進度條

  • March 18, 2013

我正在尋找一種過濾/重定向 rsync 輸出的方法,以將其提供給“dialog –gauge”命令,這樣我就可以在文件同步期間獲得一個漂亮的進度條。目前我只在提示符下直接對其進行了測試,但我打算在(bash)shell 腳本中執行此操作。

我瀏覽了網際網路並找到了一些零碎的東西,但我仍然缺少一些使它起作用的東西

(免責聲明:這可能是一種完全錯誤的方法,並且是重定向/管道怪物)

我目前匯總的內容:

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

首先,我有帶有 –progress 選項的實際 rsync 命令 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 

據我所知,“dialog –gauge”等應該接受這一點,但它只是顯示進度為 0%,直到它突然達到 100%

有人可以在這裡指出我正確的方向嗎?我離工作進度條很遠嗎?有沒有更好的方法來實現這一目標?

問候,

克里斯特

編輯:考慮到@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
for i in 10 20 30; do echo $i; sleep 1; done | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70

工作正常,所以@Shadur 是正確的,並且有緩沖在起作用。

sed剝離器添加到混合物中表明它是罪魁禍首(僅顯示 0 和 30):

for i in 10 20 30; do echo $i; sleep 1; done | sed 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70

現在問題已經知道了,您有多種選擇。awk最乾淨的方法是使用數學或字元串操作來舍入/減少百分比,但既然你有 GNU sed,只需添加-uor--unbuffered就可以了。

但是為了完整起見,一個簡單的測試案例awk也顯示了緩衝:

for i in 10 20 30; do echo $i; sleep 1; done | awk '{print $0}' | sed -u 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70 

但是你已經用 處理了fflush,所以我不希望出現問題。

引用自:https://unix.stackexchange.com/questions/44860