Come caricare un file tramite FTP dalla riga di comando?


115

Devo caricare un singolo file sul server FTP da Ubuntu. Questa operazione deve essere eseguita in uno script (in modalità non interattiva). Qual è la sintassi giusta per ftp?

Ci sto provando, inutilmente:

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

5
Come faccio a man page?
Ignacio Vazquez-Abrams,

Non so molto dello ftpstrumento in Ubuntu, ma sembra che stia soffocando ftp://. prova a tirarlo fuori forse?
Nate Koppenhaver,

@ IgnacioVazquez-Abrams man ftpalla riga di comando
c.gutierrez

Simile: Sincronizzazione dei file su FTP , ma per più file.
Kenorb,

Ricevo '-u opzione sconosciuta'.
Robert Reiz,

Risposte:


182

Ecco un approccio:

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

In alternativa, crea (o modifica) il file ~ / .netrc nella directory home dell'utente che eseguirà il comando ftp, assegnagli i permessi appropriati ( chmod 0600 ~/.netrc) e aggiungi quanto segue:

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

Quindi omettere le informazioni di accesso, come in:

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

Inoltre, ecco come potresti fare la stessa cosa usando curl:

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

12
Wow, non sapevo curlsupportato ftp! È super utile.
Sébastien,

62
+1 per la curlsoluzione. Perché preoccuparsi anche dell'altro?
Asaf,

3
@Asaph perché curl non è installato dove devo farlo, quindi l'altra soluzione è stata utile. Grazie.
Bobef

1
+1 per il ricciolo. Pulito, pulito e dritto al punto! In Debian / Ubuntu "apt-get install curl", se non ce l'hai.
GTodorov

2
la curlsoluzione è la migliore e la più semplice

17

Posso consigliare ftp-upload. È un piccolo strumento pulito che puoi installare sotto Ubuntu sudo apt-get install ftp-upload.

Esempio di utilizzo:

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

Potete fornire un link allo strumento o alla sua documentazione?
bwDraco,

1
Ciao DragonLord, se sei su Ubuntu e hai installato ftp-upload (usando il comando che ho dato prima) puoi semplicemente farlo man ftp-upload. Spero che aiuti.
Floris,

5

Devi correggere l'URL indicato nella tua dichiarazione. Hai ricevuto l'errore perché l'URL era incompleto: mancava il nome dell'oggetto che stai caricando. Dopo aver aggiunto il nome file dopo "esempio.com" come ho fatto di seguito, vedrai che il singolo comando funziona davvero come previsto.

Prova questo:

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


9
ftp: opzione non valida - 'u'
Babken Vardanyan

2
Effettivamente :( ftp: u: opzione sconosciuta
webDEVILopers,

ftp: u: opzione sconosciuta
Morten

4

Installa ncftp e usa lo strumento ncftpput che lo accompagna, praticamente qualcosa come questa sintassi:

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

Puoi anche verificare se lo stato del caricamento è buono o cattivo. Il normale client ftp può anche essere usato insieme ad aspettarsi.


3

Puoi anche provare lftp.

Ecco un esempio:

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

Fare riferimento qui per maggiori dettagli

.


2

Carica un file in una posizione remota tramite riga di 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

Uso BusyBox ftpputper fare questo:

# /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 ftpgetfunziona anche bene.


0

Puoi anche usare il comando sftp o ftp

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


0

ho migliorato la risposta di Marty come di seguito (includi il 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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.