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, 퍼센트, 헤더, 트리플 엑스).

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

관련 정보