Lista de download de FTP de caminhos absolutos

5

Eu tenho uma lista de (alguns milhares) caminhos absolutos para arquivos em um servidor remoto que preciso baixar para o meu PC.

Também preciso dos arquivos para manter a estrutura de diretórios intacta para esses arquivos.

Exemplo:

/* UNIX Server File-System  */
/home/username/
    stuff/
    more-stuff/
    data/
    file1.txt

/* Local Windows File-System After Transfer  */
C:\Users\username\Documents\home\username\
    stuff\
    more-stuff\
    data\
    file1.txt

Idealmente, eu usaria algum tipo de FTP para obter esses arquivos para o meu PC. No entanto, não tenho conhecimento de um programa ou comando da CLI que suporte a obtenção de uma lista de arquivos. Preciso obter arquivos específicos de diretórios específicos, não posso baixar diretórios inteiros.

Minha pergunta: Como posso usar uma lista de caminhos absolutos para baixar automaticamente os arquivos para meu host local? (mantendo a estrutura de diretórios intacta)

Além disso, tenho esses arquivos em uma matriz PHP. Então, é possível exportar a lista como JSON, CSV, XML, etc.

    
por Nicholas Summers 21.01.2016 / 20:38

4 respostas

3

Se você se importa, pode usar rsync com algo como

rsync -av --files-from=/path/yourlist.txt / remote:/backup

onde

  • /path/yourlist.txt você pode colocar sua lista de arquivos com o caminho completo
  • / O caminho para adicionar ao nome do arquivo em sua lista (se eles forem pathname completo / )
  • remote:/backup o nome do host remoto e seu caminho relativo

Você pode ler mais pesquisando por --files-from do man rsync [ 1 ]

--files-from=FILE

Using this option allows you to specify the exact list of files to transfer (as
read from the specified FILE or - for standard input). It also tweaks the 
default  behavior of rsync to make transferring just the  specified files and 
directories  easier:
  • The --relative (-R) option is implied, which preserves the path information that is specified for each item in the file (use --no-relative or --no-R if you want to turn that off).
  • The --dirs (-d) option is implied, which will create directories specified in the list on the destination rather than noisily skipping them (use --no-dirs or --no-d if you want to turn that off).
  • The --archive (-a) option’s behavior does not imply --recursive (-r), so specify it explicitly, if you want it.
  • These side-effects change the default state of rsync, so the position of the --files-from option on the command-line has no bearing on how other options are parsed (e.g. -a works the same before or after --files-from, as does --no-R and all other options).

... na página man há mais ...

    
por 01.02.2016 / 16:33
5

wget tem a funcionalidade que você está procurando. A partir do manpage:

-i file
       --input-file=file
           Read URLs from a local or external file.  If - is specified as file, URLs are read from the standard input.  (Use ./- to read from a file literally named -.)

Em outras palavras: wget -i filelist.txt .

A lista de arquivos

não precisa necessariamente ser txt, já que o wget suporta html através da opção --force-html . Se tudo que você tem é uma lista de diretórios / arquivos, você pode definir o URL base na linha de comando com a opção --base .

    
por 26.01.2016 / 08:32
2

However, I am unaware of a program or CLI command that supports getting a list of files.

Não sei por que isso deveria ser um obstáculo. Você pode executar ftp com um script como sua origem,

cd Target_Directory
ftp -v -s:script.ftp ftp.myhost.net 1> /absolute/path/to/my/logfile 2>&1

onde Target_Directory é onde você deseja colocar os arquivos a serem baixados, e script.ftp é um arquivo de script como este:

USER MyUserId
MyPassword
cd SOURCE_DIR
binary
prompt n
mget the_first_file_I_need
mget the_second_file_I_need
bye

Isso é bom para um único site . Como sobre muitos sites? Você pode criar um arquivo de script, chamá-lo de script_main, com as seguintes linhas:

cd Target_Directory_1
ftp -v -s:script_1.ftp ftp.myhost_1.net 1>> /absolute/path/to/my/logfile 2>>&1
cd Target_Directory_2
ftp -v -s:script_2.ftp ftp.myhost_2.net 1>> /absolute/path/to/my/logfile 2>>&1
....

e assim por diante. Você pode preparar os arquivos scrip_N.ftp analisando as informações que você possui em arquivos separados corretamente.

    
por 26.01.2016 / 08:08
2

aria2 pode ser uma possibilidade.

Na documentação :

-d, --dir=

The directory to store the downloaded file.

-i, --input-file=

Downloads the URIs listed in FILE. You can specify multiple sources for a single entity by putting multiple URIs on a single line separated by the TAB character. Additionally, options can be specified after each URI line. Option lines must start with one or more white space characters (SPACE or TAB) and must only contain one option per line. Input files can use gzip compression.

Isso exigiria um arquivo de entrada separado por diretório.

    
por 26.01.2016 / 09:12