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