lftp 鞭尾进度条

lftp 鞭尾进度条

我在 bash 脚本中使用以下命令从 ftp 服务器下载文件。此命令使用 -v 选项,该选项显示正在下载的每个文件的名称。

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

我需要修改脚本,使用whiptail 显示进度条,以显示下载进度。这是进度条,但我不知道如何让它读取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另一个内部获取它lftp,从与您的命令相同的目录开始mirror。我为“.”减去了 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

答案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

相关内容