วิธีการอัปโหลดหนึ่งไฟล์โดย FTP จากบรรทัดคำสั่ง?


114

ฉันต้องอัปโหลดไฟล์เดียวไปยังเซิร์ฟเวอร์ FTP จาก Ubuntu การดำเนินการนี้ควรทำในสคริปต์ (ในโหมดที่ไม่ใช่แบบโต้ตอบ) ไวยากรณ์ที่ถูกต้องมีไว้เพื่อftpอะไร?

ฉันพยายามทำสิ่งนี้โดยไม่มีประโยชน์:

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

5
ฉันจะหน้าคนได้อย่างไร
Ignacio Vazquez-Abrams

ผมไม่ทราบว่ามากเกี่ยวกับftpเครื่องมือในอูบุนตู ftp://แต่มันดูเหมือนว่ามันสำลักบน ลองลองดูสิ
Nate Koppenhaver

@ IgnacioVazquez-Abrams man ftpที่ command line
c.gutierrez

คล้ายกัน: ซิงค์ไฟล์ผ่าน FTPแต่สำหรับหลายไฟล์
kenorb

ฉันได้รับ '-u unknown options'
Robert Reiz

คำตอบ:


181

นี่คือวิธีหนึ่ง:

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

อีกทางหนึ่งคือสร้าง (หรือแก้ไข) ไฟล์ ~ / .netrc ในโฮม dir ของผู้ใช้ที่จะรันคำสั่ง ftp ให้คำสั่งที่เหมาะสม ( chmod 0600 ~/.netrc) และเพิ่มต่อไปนี้:

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

จากนั้นให้ละเว้นข้อมูลการเข้าสู่ระบบเช่นเดียวกับใน:

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

ต่อไปนี้เป็นวิธีที่คุณอาจทำสิ่งเดียวกันโดยใช้ curl:

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

12
ว้าวฉันไม่รู้curlftp ที่รองรับ! มันมีประโยชน์มาก
Sébastien

61
+1 สำหรับการcurlแก้ปัญหา ทำไมต้องมายุ่งกับอีกคนหนึ่ง?
Asaph

3
@ Asaph เนื่องจากไม่ได้ติดตั้ง curl ในที่ที่ฉันต้องทำสิ่งนี้ดังนั้นโซลูชันอื่นจึงมีประโยชน์ ขอบคุณ
bobef

1
+1 สำหรับ curl เรียบร้อยสะอาดและตรงประเด็น! ใน Debian / Ubuntu "apt-get install curl" ถ้าคุณไม่มี
GTodorov

2
การcurlแก้ปัญหาเป็นวิธีที่ดีที่สุดและง่ายที่สุด

17

ftp-uploadฉันสามารถขอแนะนำ มันเป็นเครื่องมือเล็ก ๆ ที่เรียบร้อยที่คุณสามารถติดตั้งในอูบุนตูsudo apt-get install ftp-uploadได้

ตัวอย่างการใช้งาน:

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

คุณสามารถให้ลิงค์ไปยังเครื่องมือหรือเอกสารประกอบของมันได้หรือไม่?
bwDraco

1
สวัสดี dragonlord ถ้าคุณอยู่ใน Ubuntu และคุณได้ติดตั้ง FTP อัปโหลด (ใช้คำสั่งฉันให้ก่อน) man ftp-uploadคุณก็สามารถทำ หวังว่าจะช่วย
Floris

5

คุณต้องแก้ไข URL ที่ให้ไว้ในใบแจ้งยอดของคุณ คุณได้รับข้อผิดพลาดเนื่องจาก URL ไม่สมบูรณ์ - ไม่มีชื่อของวัตถุที่คุณกำลังอัปโหลด เมื่อคุณเพิ่มชื่อไฟล์หลังจาก 'example.com' ตามที่ฉันทำด้านล่างคุณจะเห็นคำสั่งเดียวใช้งานได้ตามที่คุณต้องการ

ลองสิ่งนี้:

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


9
ftp: ตัวเลือกที่ไม่ถูกต้อง - 'u'
Babken Vardanyan

2
อันที่จริง :( ftp: u: ตัวเลือกที่ไม่รู้จัก
webDEVILopers

ftp: u: ตัวเลือกที่ไม่รู้จัก
มอร์เทน

4

ติดตั้ง ncftp และใช้เครื่องมือncftpputที่มาพร้อมกับมันคล้ายกับไวยากรณ์นี้:

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

คุณสามารถตรวจสอบว่าสถานะการอัปโหลดดีหรือไม่ดี ไคลเอนต์ ftp ปกติยังสามารถใช้พร้อมกับความคาดหวัง



2

อัปโหลดไฟล์ไปยังตำแหน่งระยะไกลผ่านบรรทัดคำสั่ง

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

ฉันใช้ BusyBox 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

หมายเหตุ: busybox ftpgetทำงานได้ดีเช่นกัน



0

ฉันปรับปรุงคำตอบของ Marty เช่นด้านล่าง (รวมถึงไบนารี):

[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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.