Executa o LFTP em uma lista de arquivos

7

Eu tenho uma lista delimitada por novas linhas de caminhos para os arquivos que eu gostaria de baixar via LFTP, de uma máquina remota para uma máquina local com a mesma estrutura de diretórios. Existe alguma maneira que eu possa passar LFTP a lista de arquivos (o caminho inteiro para o arquivo na máquina remota), e só baixar aqueles? Meu método atual está passando individualmente cada arquivo para o LFTP, baixando-o e repetindo o mesmo processo com o próximo arquivo até que minha lista esteja esgotada. Obviamente, o envio em lote dos arquivos para download seria muito mais rápido, minha solução atual parece desajeitada.

    
por LivingInformation 30.06.2015 / 23:51

2 respostas

3

Que tal algo como isto?

[root@localhost foo]# ls -l file*
-rw-r--r--. 1 root root 33 Jun 30 15:09 filelist
[root@localhost foo]# cat filelist
/tmp/file1
/tmp/file2
/tmp/file3
[root@localhost foo]# awk 'BEGIN { print "open localhost\nuser steve steve\n" } { print "get " $0 } END { print "exit" }' filelist | lftp
[root@localhost foo]# ls -l file*
-rw-r--r--. 1 root root  0 Jun 30 14:57 file1
-rw-r--r--. 1 root root  0 Jun 30 14:57 file2
-rw-r--r--. 1 root root  0 Jun 30 14:57 file3
-rw-r--r--. 1 root root 33 Jun 30 15:09 filelist
[root@localhost foo]#
    
por 01.07.2015 / 00:11
2

Para expandir a resposta do Steve, este script espelha uma lista de arquivos, se necessário, preservando os diretórios.

#!/bin/bash
gawk 'BEGIN { print "open ftp://example.com\n user username password\ncd /remote/dir/\n" } { if (match ($0 ,/.+\//, m)) print "mirror -v -O localbasedir/" m[0] " -f " $0  } END { print "exit" }' filelist | lftp
    
por 21.07.2015 / 14:14

Tags