Tải xuống tệp từ FTP bằng cURL


20

Tôi đang cố gắng sử dụng lệnh cURL để tải tệp từ máy chủ FTP xuống ổ đĩa cục bộ trên máy tính của mình. Tôi đã thử

curl " ftp: // myftpsite " - tên người dùng: mật khẩu -Q "CWD / users / myfolder /" -O "myfile.raw"

Nhưng nó trả về một lỗi cho biết:

curl: Tên tập tin từ xa không có chiều dài!
curl: thử 'curl --help' hoặc 'curl --manual' để biết thêm thông tin
curl: (6) Không thể giải quyết máy chủ: myfile.raw; Không có bản ghi dữ liệu của loại yêu cầu

Tôi đã thử một số phương pháp khác, nhưng dường như không có gì hiệu quả.

Ngoài ra, tôi không chắc chắn làm thế nào để xác định thư mục nào tôi muốn tải xuống tệp. Làm thế nào tôi sẽ làm điều đó?

Câu trả lời:


26

Thử

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

Trong URL FTP, đường dẫn có liên quan đến thư mục bắt đầu (thường là homedir của bạn). Bạn cần chỉ định một đường dẫn tuyệt đối và điều đó có nghĩa là sử dụng %2fđể chỉ định /. Điều này là cần thiết bởi vì đường dẫn trong ftp:URL được coi là một danh sách các tên được phân tách bằng dấu gạch chéo , mỗi tên được cho là được đặt cho một CWDlệnh riêng . Các %2fđược giải mã sau khi chia tách. Xem RFC 1738URL FTP .

Đối với vị trí đầu ra, chỉ cần đưa ra một đường dẫn đến -o.


Đề xuất bảo mật:

  • Đừng đặt mật khẩu của bạn vào URL. Lưu trữ nó trong ~/.netrccũng không đặc biệt an toàn, nhưng ít nhất nó được ẩn đi ps -ef.

  • Mật khẩu của bạn được gửi trong văn bản rõ ràng. Nếu máy chủ hỗ trợ, hãy sử dụng curl --ssl-reqdhoặccurl ftps://mysite/...

  • Sử dụng SFTP (giao thức truyền tệp SSH) sẽ còn tốt hơn nữa.


Làm việc tuyệt vời. Không hoàn toàn chắc chắn tôi hoàn toàn hiểu cách sử dụng% 2f, vì bạn cũng đang sử dụng /, nhưng hey nó hoạt động, vì vậy tôi sẽ không phàn nàn. Cảm ơn đã giúp đỡ!
Josiah

1
@Josiah: Có vẻ như "đường dẫn" của URL được phân chia theo /và mỗi đối số được gửi bằng một CWDlệnh: %2fusers/myfolderas CWD /users, CWD myfolder. Xem RFC 1738 về chủ đề này.
user1686

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

Tôi sử dụng tất cả các thời gian. Nó hoạt động như một say mê.


1
Tôi có phải là người đầu tiên nhận thấy câu trả lời này là sai? Tham số -T có nghĩa là "tải lên tệp", trong khi OP yêu cầu "tải xuống tệp"
Kar.ma

0

Thử:

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

(Nếu tên tệp từ xa là 'myfile.raw')


Khi tôi thử điều đó, tôi nhận được lỗi sau: "curl: (9) Máy chủ từ chối bạn thay đổi thư mục đã cho". Tôi tin rằng đó là lý do tại sao tôi cần sử dụng lệnh -Q "CWD".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.