กำลังดาวน์โหลดไฟล์จาก FTP โดยใช้ cURL


20

ฉันพยายามใช้คำสั่ง cURL เพื่อดาวน์โหลดไฟล์จากเซิร์ฟเวอร์ FTP ไปยังไดรฟ์ในคอมพิวเตอร์ของฉัน ฉันได้พยายาม

curl " ftp: // myftpsite " - ชื่อผู้ใช้: รหัสผ่าน -Q "CWD / users / myfolder /" -O "myfile.raw"

แต่จะส่งคืนข้อผิดพลาดที่แจ้งว่า:

curl: ชื่อไฟล์ระยะไกลไม่มีความยาว!
curl: ลอง 'curl --help' หรือ 'curl - คู่มือ' สำหรับข้อมูลเพิ่มเติม
curl: (6) ไม่สามารถแก้ไขโฮสต์: myfile.raw; ไม่มีการบันทึกข้อมูลประเภทที่ร้องขอ

ฉันได้ลองวิธีอื่นแล้ว แต่ดูเหมือนว่าจะไม่ทำงาน

นอกจากนี้ฉันไม่แน่ใจว่าจะระบุโฟลเดอร์ที่ฉันต้องการให้ดาวน์โหลดไฟล์ได้อย่างไร ฉันจะทำอย่างไร

คำตอบ:


26

ลอง

curl -u user:password 'ftp://mysite/%2fusers/myfolder/myfile/raw' -o ~/Downloads/myfile.raw

ใน FTP URL พา ธ จะสัมพันธ์กับไดเรกทอรีเริ่มต้น (โดยทั่วไปคือ homedir ของคุณ) คุณต้องระบุเส้นทางที่แน่นอนและนั่นหมายถึงการใช้เพื่อระบุ%2f /สิ่งนี้จำเป็นเนื่องจากพา ธ ในftp:URL ถือเป็นรายการของชื่อที่คั่นด้วยเครื่องหมายสแลชซึ่งแต่ละรายการควรถูกกำหนดให้กับCWDคำสั่งแยกต่างหาก %2fถอดรหัสหลังจากแยก ดูRFC 1738และFTP URL ที่

-oในฐานะที่เป็นที่ตั้งของการส่งออกเพียงแค่ให้เส้นทางไปยัง


คำแนะนำด้านความปลอดภัย:

  • อย่าใส่รหัสผ่านใน URL เก็บไว้ใน~/.netrcไม่ได้โดยเฉพาะอย่างยิ่งการรักษาความปลอดภัยอย่างใดอย่างหนึ่ง ps -efแต่อย่างน้อยจะถูกซ่อนจาก

  • รหัสผ่านของคุณถูกส่งเป็นข้อความที่ชัดเจน หากเซิร์ฟเวอร์รองรับให้ใช้curl --ssl-reqdหรือcurl ftps://mysite/...

  • การใช้ SFTP (โปรโตคอลการถ่ายโอนไฟล์ SSH) จะดียิ่งขึ้น


ใช้งานได้ดีมาก ไม่แน่ใจว่าฉันเข้าใจวิธีการใช้% 2f อย่างเต็มที่เช่นเดียวกับที่คุณใช้ / แต่ก็ใช้งานได้ดีดังนั้นฉันจะไม่บ่น ขอบคุณสำหรับความช่วยเหลือ!
Josiah

1
@Josiah: ดูเหมือนว่า URL "เส้นทาง" คือแยกจาก/กันและแต่ละอาร์กิวเมนต์จะถูกส่งไปพร้อมกับCWDคำสั่ง: %2fusers/myfolderเป็น,CWD /users CWD myfolderดูRFC 1738ในหัวข้อนี้
user1686

2
curl -T /users/myfolder/myfile.raw -u username:password "ftp://myftpsite/path/myfile.raw"

ฉันใช้สิ่งนี้ตลอดเวลา มันทำงานเหมือนจับใจ


1
ฉันเป็นคนแรกที่สังเกตเห็นคำตอบนี้ผิดหรือเปล่า? พารามิเตอร์ -T หมายถึง "การอัปโหลดไฟล์" ขณะที่ OP ขอให้ "ดาวน์โหลดไฟล์"
Kar.ma

0

ลอง:

curl "ftp://user:password@myftpsite/users/myfolder/myfile.raw"

(หากชื่อไฟล์ระยะไกลคือ 'myfile.raw')


เมื่อฉันลองที่ฉันได้รับข้อผิดพลาดต่อไปนี้: "curl: (9) เซิร์ฟเวอร์ปฏิเสธให้คุณเปลี่ยนเป็นไดเรกทอรีที่กำหนด" ฉันเชื่อว่านี่เป็นสาเหตุที่ฉันต้องใช้คำสั่ง -Q "CWD"

0

ตามที่ Yan แนะนำ

curl " ftp: // ผู้ใช้: password@myftpsite/users/myfolder/myfile.raw "

ควรใช้งานได้ แต่เซิร์ฟเวอร์ FTP บางตัวใช้นโยบายความปลอดภัยที่ไม่เป็นไปตามมาตรฐาน ในกรณีเหล่านั้นตัวเลือก--ftp-method singlecwdหรือ--ftp-method nocwdอาจช่วย

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