Como fazer upload de um diretório recursivamente para um servidor FTP usando apenas ftp ou lftp?

15

Estou escrevendo um script de shell do Linux para copiar um diretório local para um servidor remoto (removendo todos os arquivos existentes).

Comandos

Servidor local: ftp e lftp estão disponíveis, não ncftp ou quaisquer ferramentas gráficas.

Servidor remoto: acessível apenas via FTP. Não rsync nem SSH nem FXP.

Estou pensando em listar arquivos locais e remotos para gerar um script lftp e depois executá-lo. Existe uma maneira melhor?

Observação: o upload de apenas arquivos modificados seria uma vantagem, mas não obrigatória.

    
por Nicolas Raoul 11.01.2011 / 07:46

4 respostas

32

lftp deve ser capaz de fazer isso em uma etapa, em particular com lftp mirror :

EDIT: a sintaxe do comando lftp é confusa, a chamada original que eu postei não funciona. Experimente assim:

lftp -e "mirror -R {local dir} {remote dir}" -u {username},{password} {host}

anote as aspas em torno dos argumentos para a opção -e .

    
por 11.01.2011 / 08:05
1

Com base na ideia de Phil de usar o modo espelho do lftp, este comando faz o truque:

lftp -c 'open -e "mirror /tmp/thedir ftp://nico:mypass@remotehost/~/destination/" ftp://nico:mypass@localhost'

Uma desvantagem é que requer que o servidor local tenha um servidor FTP em execução.

    
por 11.01.2011 / 09:47
0
cd {local_dir}
lftp {server}
cd {remote_dir}
mput {local_dir}/*

Isso funcionou para mim, muitas outras tentativas falharam. Uma vez no lftp, mais informações disponíveis via:

help mput
    
por 11.11.2016 / 03:27
0

Finalmente recebi a resposta !!! Crie o script de shell ftpmirror.sh

#!/bin/bash 
path = /local-dir-path
lftp -e "mirror -R $path /$path" -u username,password ftp-server-ip
  • Caminho = diretório local que queremos copiar no servidor ftp
  • nome de usuário = nome de usuário do servidor ftp
  • senha = senha do servidor ftp
  • ftp-server-ip = endereço IP do servidor ftp

Se o pacote lftp não estiver instalado, ele será instalado usando o yum.

    
por 17.03.2018 / 07:21