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

102

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

Estou tentando isso, sem sucesso:

$ ftp -u ftp://user:[email protected] my-local-file.txt
ftp: Invalid URL 'ftp://'
    
por yegor256 15.08.2011 / 03:40

10 respostas

162

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 home do usuário que irá executar o comando ftp, dê-lhe permissões permanentes ( chmod 0600 ~/.netrc ) e adicione o seguinte:

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

Em seguida, 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 o curl:

$ curl -T my-local-file.txt ftp://ftp.example.com --user user:secret
    
por 15.08.2011 / 06:39
13

Eu posso recomendar ftp-upload . É uma pequena ferramenta que você pode instalar no Ubuntu através de sudo apt-get install ftp-upload .

Exemplo de uso:

ftp-upload -h {HOST} -u {USERNAME} --password {PASSWORD} -d {SERVER_DIRECTORY} {FILE_TO_UPLOAD}
    
por 27.01.2015 / 16:52
5

Você precisa corrigir o URL fornecido em seu extrato. Você recebeu o erro porque o URL estava incompleto - estava faltando o nome do objeto que você está enviando. Depois de adicionar o nome do arquivo depois de 'exemplo.com', como eu fiz abaixo, você verá que o único comando realmente funciona como você pretendia.

Tente isto:

ftp -u ftp://user:[email protected]/my-local-file.txt my-local-file.txt

    
por 02.12.2011 / 20:59
4

Instale o ncftp e use a ferramenta ncftpput que vem junto, algo parecido com essa 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 esperado.

    
por 15.08.2011 / 06:37
2

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 mais detalhes

.

    
por 10.01.2013 / 10:06
2

Envie 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
    
por 29.04.2015 / 09:48
1

Eu uso o ftpput do BusyBox para 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 ftpget funciona bem também.

    
por 16.02.2015 / 18:47
0

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

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

    
por 16.02.2015 / 20:37
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
    
por 31.07.2017 / 04:59
-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
...
    
por 25.08.2017 / 20:06