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を引く。と「..」がリストに表示されます。lftp
mirror
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