lftp whiptail barra de progresso

1

Estou usando o seguinte comando em um script bash para baixar arquivos de um servidor ftp. Este comando usa a opção -v que mostra o nome de cada arquivo que está sendo baixado.

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

Eu preciso modificar o script, para exibir uma barra de progresso usando o whiptail, para mostrar o progresso do download. Esta é a barra de progresso, mas não sei como fazer com que ela leia o progresso do download do lftp.

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

Como posso fazer isso?

    
por aristosv 02.06.2016 / 14:07

1 resposta

1

Para fazer uma porcentagem, você precisa saber o número total de arquivos. Você pode obter isso de um ls -R dentro de outro lftp , iniciando no mesmo diretório que seu comando mirror . Eu subtrai 2 para "." e ".." na listagem.

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

Você pode ler cada saída de linha do lftp e, para aqueles que começam com "Transferindo", você pode incrementar um contador de linha, calcular a porcentagem e usar o estilo de entrada "XXX" que --gauge aceita (XXX, um por cento um título, 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
    
por 02.06.2016 / 15:31