2011-08-15 01:40:11 +0000 2011-08-15 01:40:11 +0000
117
117

¿Cómo subir un archivo por FTP desde la línea de comandos?

Necesito subir un solo archivo al servidor FTP desde Ubuntu. Esta operación debe hacerse en un script (en modo no interactivo). ¿Cuál es la sintaxis correcta para ftp?

Estoy intentando esto, sin éxito:

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

Respuestas (10)

188
188
188
2011-08-15 04:39:47 +0000

Aquí hay un enfoque:

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

Alternativamente, crear (o editar) el ~/. netrc en el directorio principal del usuario que ejecutará el comando ftp, dale las permanentes apropiadas (chmod 0600 ~/.netrc), y agrega lo siguiente:

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

Luego omite la información de ingreso, como en:

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

También, así es como podrías hacer lo mismo usando curl:

$ curl -T my-local-file.txt ftp://ftp.example.com --user user:secret
18
18
18
2015-01-27 15:52:13 +0000

Puedo recomendar ftp-upload. Es una pequeña herramienta que puedes instalar en ubuntu hasta sudo apt-get install ftp-upload.

Ejemplo de uso:

ftp-upload -h {HOST} -u {USERNAME} --password {PASSWORD} -d {SERVER_DIRECTORY} {FILE_TO_UPLOAD}
5
5
5
2011-12-02 19:59:23 +0000

Tienes que arreglar la URL que aparece en tu declaración. Recibiste el error porque la URL estaba incompleta - faltaba el nombre del objeto que estás subiendo. Una vez que agregues el nombre de archivo después de ‘example.com’ como lo he hecho a continuación, verás que el comando único funciona efectivamente como lo habías previsto.

Prueba esto:

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

4
4
4
2013-01-10 09:06:56 +0000

También puedes probar lftp.

Aquí hay un ejemplo:

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

Refiérase aquí para más detalles

.

4
4
4
2011-08-15 04:37:46 +0000

Instala ncftp y usa la herramienta ncftpput que viene con él, algo así como esta sintaxis:

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

Incluso puedes comprobar si el estado de la subida es bueno o malo. El cliente ftp normal también puede ser usado junto con expect.

2
2
2
2015-04-29 07:48:35 +0000

Subir un archivo a una ubicación remota a través de la línea de comandos

#!/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
1
1
2015-02-16 17:47:05 +0000

Uso el ftpput de BusyBox para hacer esto:

# /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 también funciona bien.

0
0
0
2015-02-16 19:37:53 +0000

También podrías usar el comando sftp o ftp

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

0
0
0
2017-07-31 02:59:52 +0000

Mejoré la respuesta de Marty como la siguiente (incluye el binario):

[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
-1
-1
-1
2017-08-25 18:06:21 +0000
FtpPut(){
    echo `echo -e "open host\nuser user pass\nbinary\nput $1\nquit"|ftp -nv`
}
FtpPut asd.txt
FtpPut asd.mp4
FtpPut asd.php
...