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:secret@ftp.example.com my-local-file.txt
ftp: Invalid URL `ftp://'

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

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}

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:secret@ftp.example.com/my-local-file.txt my-local-file.txt


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.


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

.


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

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.


0

Anda juga bisa menggunakan perintah sftp atau ftp

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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.