Bagaimana cara mengunggah satu file dengan FTP dari baris perintah?

115

Saya perlu mengunggah satu file ke server FTP dari Ubuntu. Operasi ini harus dilakukan dalam skrip (dalam mode non-interaktif). Untuk apa sintaks yang tepat ftp?

Saya mencoba ini, tetapi tidak berhasil:

$ ftp -u ftp://user:[email protected] my-local-file.txt
ftp: Invalid URL `ftp://'
yegor256
sumber
5
Bagaimana caranya halaman manual?
Ignacio Vazquez-Abrams
Saya tidak tahu banyak tentang ftpalat ini di Ubuntu, tetapi sepertinya alat ini tersedak ftp://. coba keluarkan itu mungkin?
Nate Koppenhaver
@ IgnacioVazquez-Abrams man ftpdi baris perintah
c.gutierrez
Mirip: Menyinkronkan file melalui FTP , tetapi untuk banyak file.
kenorb
Saya mendapatkan '-u opsi yang tidak diketahui'.
Robert Reiz

Jawaban:

182

Berikut ini satu pendekatan:

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

Atau, buat (atau edit) file ~ / .netrc di home dir dari pengguna yang akan menjalankan perintah ftp, berikan perms yang sesuai ( chmod 0600 ~/.netrc), dan tambahkan yang berikut ini:

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

Kemudian abaikan informasi login, seperti pada:

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

Juga, inilah cara Anda melakukan hal yang sama menggunakan curl:

$ curl -T my-local-file.txt ftp://ftp.example.com --user user:secret
Marty
sumber
12
Wow, saya tidak tahu curlftp yang didukung! Ini sangat berguna.
Sébastien
62
+1 untuk curlsolusinya. Kenapa repot-repot dengan yang lain?
Asaf
3
@ Asaf karena curl tidak diinstal di mana saya perlu melakukan ini, jadi solusi lain sangat berguna. Terima kasih.
bobef
1
+1 untuk ikal. Rapi, bersih, dan langsung ke intinya! Di Debian / Ubuntu "apt-get install curl", jika Anda tidak memilikinya.
GTodorov
2
yang curlsolusi adalah yang terbaik dan termudah
17

Saya dapat merekomendasikan ftp-upload. Ini adalah alat kecil yang rapi yang dapat Anda pasang di bawah ubuntu sudo apt-get install ftp-upload.

Contoh penggunaan:

ftp-upload -h {HOST} -u {USERNAME} --password {PASSWORD} -d {SERVER_DIRECTORY} {FILE_TO_UPLOAD}
Floris
sumber
Bisakah Anda memberikan tautan ke alat atau dokumentasinya?
bwDraco
1
Hai DragonLord, jika Anda berada di Ubuntu dan Anda telah menginstal ftp-unggah (menggunakan perintah yang saya berikan sebelumnya) yang bisa Anda lakukan man ftp-upload. Semoga itu bisa membantu.
Floris
5

Anda perlu memperbaiki URL yang diberikan dalam pernyataan Anda. Anda menerima kesalahan karena URL tidak lengkap - tidak ada nama objek yang Anda unggah. Setelah Anda menambahkan nama file setelah 'example.com' seperti yang saya lakukan di bawah, Anda akan melihat perintah tunggal memang berfungsi seperti yang Anda inginkan.

Coba ini:

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

Paul
sumber
9
ftp: opsi tidak valid - 'u'
Babken Vardanyan
2
Memang :( ftp: u: opsi tidak dikenal
webDEVILopers
ftp: u: opsi tidak diketahui
Morten
4

Instal ncftp dan gunakan alat ncftpput yang menyertainya, cukup banyak seperti sintaks ini:

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

Anda bahkan dapat memeriksa apakah status unggahannya baik atau buruk. Klien ftp normal juga dapat digunakan bersama dengan harapan.

OG
sumber
3

Anda juga bisa mencoba lftp.

Berikut ini sebuah contoh:

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

Lihat di sini untuk detail lebih lanjut

.

divinedragon
sumber
2

Unggah file ke lokasi jauh melalui baris perintah

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

Saya menggunakan BusyBox ftpputuntuk melakukan ini:

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

Catatan: busybox ftpgetbekerja dengan baik juga.

Naskel
sumber
0

Anda juga bisa menggunakan perintah sftp atau ftp

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

iProgram
sumber
0

saya meningkatkan jawaban Marty seperti di bawah ini (termasuk biner):

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