Como fazer upload de um arquivo por FTP a partir da linha de comando?


115

Eu preciso fazer upload de um único arquivo para o servidor FTP do Ubuntu. Esta operação deve ser realizada em um script (no modo não interativo). Qual é a sintaxe correta ftp?

Estou tentando isso, sem sucesso:

$ ftp -u ftp://user:secret@ftp.example.com my-local-file.txt
ftp: Invalid URL `ftp://'

5
Como man page?
Ignacio Vazquez-Abrams

Eu não sei muito sobre a ftpferramenta no Ubuntu, mas parece que ela está engasgada com o ftp://. tente tirar isso talvez?
Nate Koppenhaver

@ IgnacioVazquez-Abrams man ftpna linha de comando
c.gutierrez 13/03/15

Semelhante: Sincronizando arquivos por FTP , mas para vários arquivos.
kenorb

Estou recebendo '-u opção desconhecida'.
Robert Reiz

Respostas:


182

Aqui está uma abordagem:

$ ftp -n <<EOF
open ftp.example.com
user user secret
put my-local-file.txt
EOF

Como alternativa, crie (ou edite) o arquivo ~ / .netrc no diretório inicial do usuário que executará o comando ftp, forneça perms apropriados ( chmod 0600 ~/.netrc) e adicione o seguinte:

# ~/.netrc
machine ftp.example.com
login user
password secret

Omita as informações de login, como em:

$ echo put my-local-file.txt | ftp ftp.example.com

Além disso, veja como você pode fazer a mesma coisa usando curl:

$ curl -T my-local-file.txt ftp://ftp.example.com --user user:secret

12
Uau, eu não sabia curlftp suportado! É super útil.
Sébastien

62
+1 para a curlsolução. Por que se preocupar com o outro?
Asaph

3
@ Asaph porque o curl não está instalado onde eu preciso fazer isso, então a outra solução foi útil. Obrigado.
bobef 11/09/14

1
+1 para a curvatura. Arrumado, limpo e direto ao ponto! No Debian / Ubuntu, "apt-get install curl", se você não o possui.
GTodorov 6/03/16

2
a curlsolução é a melhor e a mais fácil #

17

Eu posso recomendar ftp-upload. É uma pequena ferramenta que você pode instalar no ubuntu sudo apt-get install ftp-upload.

Exemplo de uso:

ftp-upload -h {HOST} -u {USERNAME} --password {PASSWORD} -d {SERVER_DIRECTORY} {FILE_TO_UPLOAD}

Você pode fornecer um link para a ferramenta ou sua documentação?
precisa saber é o seguinte

1
Olá, DragonLord, se você está no Ubuntu e instalou o ftp-upload (usando o comando que eu dei antes), você pode fazer man ftp-upload. Espero que ajude.
Floris

5

Você precisa corrigir o URL fornecido no seu extrato. Você recebeu o erro porque o URL estava incompleto - estava faltando o nome do objeto que você está carregando. Depois de adicionar o nome do arquivo após 'example.com', como fiz abaixo, você verá que o único comando realmente funciona como pretendido.

Tente o seguinte:

ftp -u ftp://user:secret@ftp.example.com/my-local-file.txt my-local-file.txt


9
ftp: opção inválida - 'u'
Babken Vardanyan

2
Na verdade :( ftp: u: desconhecidos opção
webDEVILopers

ftp: u: opção desconhecida
Morten

4

Instale o ncftp e use a ferramenta ncftpput que o acompanha, praticamente algo como esta sintaxe:

ncftpput -u ftpuser -p ftppass ftphostname /path/where/to/upload localfile.name
if [ $? -ne 0 ]; then echo "Upload failed"; fi

Você pode até verificar se o status do upload é bom ou ruim. O cliente ftp normal também pode ser usado junto com o expect.


3

Você também pode tentar lftp.

Aqui está um exemplo:

lftp -e 'cd folder1/folder2; put /home/path/yourfile.tar; bye' -u user,password ftp.theserver.com

Consulte aqui para mais detalhes

.


2

Carregar um arquivo para um local remoto via linha de comando

#!/bin/bash
#$1 is the file name
#usage:this_script <filename>
HOST='yourhost'
USER="youruser"
PASSWD="pass"
FILE="abc.php"
REMOTEPATH='/html'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd $REMOTEPATH
put $FILE 
quit
END_SCRIPT
exit 0

1

Eu uso o BusyBox ftpputpara fazer isso:

# /bin/busybox ftpput

BusyBox v1.20.2 (Debian 1:1.20.0-7) multi-call binary.

Usage: ftpput [OPTIONS] HOST [REMOTE_FILE] LOCAL_FILE

Upload a file to a FTP server

    -v,--verbose            Verbose
    -u,--username USER      Username
    -p,--password PASS      Password
    -P,--port NUM           Port

Nota: busybox ftpgettrabalhe bem também.


0

Você também pode usar o comando sftp ou ftp

sftp {user}@{IP}
Password:
put {path To File On Local Computer}


0

Eu melhorei a resposta do Marty como abaixo (inclua o binário):

[ftp_example_1.sh]

$ ftp_example_sh.sh dump_file

ftp -n <<EOF
open 192.168.0.10
user anonymous aaa
binary
put $1
EOF

[ftp_example_2.sh]

$ ftp_example_2.sh 192.168.0.10 dump_file

ftp -n <<EOF
open $1
user anonymous aaa
binary
put $2
EOF

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.