web-dev-qa-db-ja.com

lftpホイップテールプログレスバー

Bashスクリプトで次のコマンドを使用して、ftpサーバーからファイルをダウンロードしています。このコマンドは、ダウンロードされる各ファイルの名前を表示する-vオプションを使用します。

/usr/bin/lftp ftp://$ftpuser:$ftppass@$ftphost -e "$ftpsettings ;
  mirror -v -e $remotemedia $localmedia ; quit"

スクリプトを変更して、ホイップテールを使用してプログレスバーを表示し、ダウンロードの進行状況を表示する必要があります。これはプログレスバーですが、lftpのダウンロードの進行状況を読み取らせる方法がわかりません。

{
    for ((i = 0 ; i <= 100 ; i+=5)); do
        sleep 0.1
        echo $i
    done
} | whiptail --gauge "Downloading file $name..." 6 50 0

これどうやってするの?

1
aristosv

パーセンテージを実行するには、ファイルの総数を知る必要があります。これは、lftpコマンドと同じディレクトリから開始して別のmirror内のls -Rから取得できます。 「。」の2を引いた。リスト内の「..」。

let total=$(lftp "ftp://$ftpuser:$ftppass@$ftphost" -e "$ftpsettings ;
   ls -R $remotemedia; quit" | wc -l)-2

次に、lftpから出力された各行を読み取ることができます。「転送」を開始する場合は、行カウンターをインクリメントし、パーセンテージを計算して、--gaugeが受け入れる「XXX」入力スタイルを使用できます(XXX、パーセント、タイトル、XXX)。

lftp "ftp://$ftpuser:$ftppass@$ftphost" -e "$ftpsettings ;
  mirror -v -e $remotemedia $localmedia ; quit" |

while read Word word2 filename
do    if [ "$Word" = Transferring ]
      then let count=count+1
           let percent=count*100/total
           echo -e "XXX\n$percent\nDownloading $filename\nXXX"
      fi
done |
whiptail --title lftp --gauge progress 10 60 0
1
meuh