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

115

Necesito cargar un solo archivo al servidor FTP desde Ubuntu. Esta operación debe hacerse en un script (en modo no interactivo). ¿Para qué es la sintaxis correcta ftp?

Estoy intentando esto, en vano:

$ ftp -u ftp://user:[email protected] my-local-file.txt
ftp: Invalid URL `ftp://'
yegor256
fuente
55
¿Cómo hago la página man?
Ignacio Vazquez-Abrams
No sé mucho sobre la ftpherramienta en Ubuntu, pero parece que se está ahogando en el ftp://. intenta sacar eso tal vez?
Nate Koppenhaver
@ IgnacioVazquez-Abrams man ftpen la línea de comando
c
Similar: Sincronización de archivos a través de FTP , pero para múltiples archivos.
kenorb
Estoy obteniendo '-u opción desconocida'.
Robert Reiz

Respuestas:

182

Aquí hay un enfoque:

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

Alternativamente, cree (o edite) el archivo ~ / .netrc en el directorio de inicio del usuario que ejecutará el comando ftp, dele los permisos apropiados ( chmod 0600 ~/.netrc) y agregue lo siguiente:

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

Luego omita la información de inicio de sesión, como en:

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

Además, así es como podría hacer lo mismo con curl:

$ curl -T my-local-file.txt ftp://ftp.example.com --user user:secret
Marty
fuente
12
Wow, no sabía que curlsoportaba ftp! Es super manejable.
Sébastien
6262
+1 para la curlsolución. ¿Por qué incluso molestarse con el otro?
Asaph
3
@Asaph porque curl no está instalado donde necesito hacer esto, por lo que la otra solución fue útil. Gracias.
bobef
1
+1 para el rizo. ¡Aseado, limpio y directo al grano! En Debian / Ubuntu "apt-get install curl", si no lo tiene.
GTodorov
2
la curlsolución es la mejor y la más fácil
17

Puedo recomendar ftp-upload. Es una pequeña herramienta ordenada que puede instalar en ubuntu a través sudo apt-get install ftp-upload.

Ejemplo de uso:

ftp-upload -h {HOST} -u {USERNAME} --password {PASSWORD} -d {SERVER_DIRECTORY} {FILE_TO_UPLOAD}
Floris
fuente
¿Puede proporcionar un enlace a la herramienta o su documentación?
bwDraco
1
Hola DragonLord, si estás en Ubuntu y has instalado ftp-upload (usando el comando que le di antes) puedes hacerlo man ftp-upload. Espero que ayude.
Floris
5

Debe corregir la URL que figura en su estado de cuenta. Recibió el error porque la URL estaba incompleta: le faltaba el nombre del objeto que está cargando. Una vez que agregue el nombre del archivo después de 'example.com' como lo he hecho a continuación, verá que el comando único funciona de la manera deseada.

Prueba esto:

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

Pablo
fuente
99
ftp: opción no válida - 'u'
Babken Vardanyan
2
De hecho :( ftp: u: opción desconocida
webDEVILopers
ftp: u: opción desconocida
Morten
4

Instale ncftp y use la herramienta ncftpput que viene junto con ella, más o menos como esta sintaxis:

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

Incluso puede verificar si el estado de carga es bueno o malo. El cliente ftp normal también se puede usar junto con esperar.

OG
fuente
3

También puedes intentarlo lftp.

Aquí hay un ejemplo:

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

Consulte aquí para más detalles

.

divinedragon
fuente
2

Subir un archivo a una ubicación remota a través de la línea 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
fuente
1

Yo uso BusyBox ftpputpara 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 ftpgetfunciona bien también.

Naskel
fuente
0

También puede usar el comando sftp o ftp

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

iProgram
fuente
0

Mejoré la respuesta de Marty como a continuación (incluye 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

[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
fuente
-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
fuente