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:[email protected] my-local-file.txt
ftp: Invalid URL `ftp://'
yegor256
fonte
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
Marty
fonte
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}
Floris
fonte
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:[email protected]/my-local-file.txt my-local-file.txt

Paulo
fonte
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.

OG
fonte
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

.

divinedragon
fonte
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
Shal
fonte
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.

Naskel
fonte
0

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

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

iProgram
fonte
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
sailfish009
fonte
-1
FtpPut(){
    echo `echo -e "open host\nuser user pass\nbinary\nput $1\nquit"|ftp -nv`
}
FtpPut asd.txt
FtpPut asd.mp4
FtpPut asd.php
...
Yöncü Bilişim Çözümleri
fonte