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

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

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

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

ダウンロードの進行状況を表示するために進行状況バーを表示するには、hiptailを使用するようにスクリプトを変更する必要があります。これは進行状況バーですが、lftpダウンロードの進行状況を読み取る方法を知りません。

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

どうすればいいですか?

答え1

パーセンテージを計算するには、ファイルの総数を知る必要があります。コマンドと同じディレクトリから始めて、ls -R別のコマンド内からそれをインポートできます。 「.」に対して2を引く。と「..」がリストに表示されます。lftpmirror

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

その後、lftpから出力の各行を読み取ることができ、「転送」が始まる行に対して行カウンタをインクリメントし、パーセントを計算します--gauge(XXX、パーセント、ヘッダ、X)。

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

答え2

私の考えでは、ホイップテール(多くの愛を受けるtqdm)よりもうまく機能する代替を追加するだけです。 Tqdmは、選択したpipまたはYiurパッケージマネージャを介してインストールできます。

これを使用するには、同じアイデアに従います。まず、ファイル数を取得し、ループの繰り返し回数をエコーし​​、すべてtqdmにパイプします。

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

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
           echo "$count" 
      fi
done | tqdm --total $total

関連情報