Wie lade ich eine Datei per FTP von der Kommandozeile hoch?

114

Ich muss eine einzelne Datei von Ubuntu auf den FTP-Server hochladen. Diese Operation sollte in einem Skript ausgeführt werden (im nicht interaktiven Modus). Wofür ist die richtige Syntax ftp?

Ich versuche das, ohne Erfolg:

$ ftp -u ftp://user:[email protected] my-local-file.txt
ftp: Invalid URL `ftp://'
yegor256
quelle
5
Wie kann ich eine Manpage erstellen?
Ignacio Vazquez-Abrams
Ich weiß nicht viel über das ftpTool in Ubuntu, aber es sieht so aus, als würde es am Computer ersticken ftp://. versuchen Sie das vielleicht herauszunehmen?
Nate Koppenhaver
@ IgnacioVazquez-Abrams man ftpin der Befehlszeile
c.gutierrez
Ähnlich: Synchronisieren von Dateien über FTP , jedoch für mehrere Dateien.
Kenorb
Ich bekomme '-u unbekannte Option'.
Robert Reiz

Antworten:

181

Hier ist ein Ansatz:

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

Alternativ können Sie die Datei ~ / .netrc im Ausgangsverzeichnis des Benutzers erstellen (oder bearbeiten), der den Befehl ftp ausführt, ihm die entsprechenden Berechtigungen ( chmod 0600 ~/.netrc) erteilen und Folgendes hinzufügen:

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

Dann lassen Sie die Anmeldeinformationen weg, wie in:

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

Hier ist auch, wie Sie dasselbe mit Locken machen können:

$ curl -T my-local-file.txt ftp://ftp.example.com --user user:secret
Marty
quelle
12
Wow, ich wusste nicht, curldass FTP unterstützt wird! Es ist super praktisch.
Sébastien
61
+1 für die curlLösung. Warum sich überhaupt mit dem anderen beschäftigen?
Asaph
3
@Asaph, weil curl nicht dort installiert ist, wo ich das machen muss, also hat sich die andere Lösung als nützlich erwiesen. Vielen Dank.
Bobef
1
+1 für die Locke. Ordentlich, sauber und direkt auf den Punkt! In Debian / Ubuntu "apt-get install curl", wenn Sie es nicht haben.
GTodorov
2
Die curlLösung ist die beste und einfachste
17

Ich kann empfehlen ftp-upload. Es ist ein hübsches kleines Tool, das Sie unter Ubuntu durch installieren können sudo apt-get install ftp-upload.

Anwendungsbeispiel:

ftp-upload -h {HOST} -u {USERNAME} --password {PASSWORD} -d {SERVER_DIRECTORY} {FILE_TO_UPLOAD}
Floris
quelle
Können Sie einen Link zum Tool oder seiner Dokumentation bereitstellen?
bwDraco
1
Hallo DragonLord, wenn du in Ubuntu bist und ftp-upload installiert hast (mit dem Befehl, den ich vorher gegeben habe), kannst du das einfach tun man ftp-upload. Ich hoffe, das hilft.
Floris
5

Sie müssen die in Ihrer Anweisung angegebene URL korrigieren. Sie haben den Fehler erhalten, weil die URL unvollständig war - es fehlte der Name des Objekts, das Sie hochladen. Wenn Sie den Dateinamen nach 'example.com' hinzufügen, wie ich es weiter unten getan habe, wird der einzelne Befehl tatsächlich so funktionieren, wie Sie es beabsichtigt haben.

Versuche dies:

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

Paul
quelle
9
ftp: ungültige Option - "u"
Babken Vardanyan
2
In der Tat :( ftp: u: unbekannte Option
webDEVILopers
ftp: u: unbekannte Option
Morten
4

Installieren Sie ncftp und verwenden Sie das mitgelieferte Tool ncftpput, das ungefähr der folgenden Syntax entspricht:

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

Sie können sogar überprüfen, ob der Upload-Status gut oder schlecht ist. Mit expect kann auch der normale FTP-Client verwendet werden.

OG
quelle
3

Sie können es auch versuchen lftp.

Hier ist ein Beispiel:

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

Weitere Details finden Sie hier

.

Divinedragon
quelle
2

Laden Sie eine Datei über die Befehlszeile an einen Remote-Speicherort hoch

#!/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
quelle
1

Ich benutze dazu BusyBox's ftpput:

# /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

Hinweis: busybox ftpgetfunktioniert auch gut.

Naskel
quelle
0

Sie können auch den Befehl sftp oder ftp verwenden

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

iProgram
quelle
0

Ich habe Martys Antwort wie folgt verbessert (einschließlich Binärdatei):

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