Mengunduh file dari FTP menggunakan cURL

20

Saya mencoba menggunakan perintah CURL untuk mengunduh file dari server FTP ke drive lokal di komputer saya. Saya sudah mencoba

curl " ftp: // myftpsite " - nama pengguna: kata sandi -Q "CWD / users / myfolder /" -O "myfile.raw"

Tapi itu mengembalikan kesalahan yang mengatakan:

curl: Nama file jarak jauh tidak panjang!
curl: coba 'curl --help' atau 'curl --manual' untuk informasi lebih lanjut
curl: (6) Tidak dapat menyelesaikan host: myfile.raw; Tidak ada catatan data dari tipe yang diminta

Saya sudah mencoba beberapa metode lain, tetapi sepertinya tidak ada yang berhasil.

Selain itu, saya tidak begitu yakin bagaimana menentukan folder mana yang saya inginkan untuk mengunduh file tersebut. Bagaimana saya melakukannya?

Josiah
sumber

Jawaban:

26

Mencoba

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

Di URL FTP, jalur relatif ke direktori awal (biasanya homedir Anda). Anda perlu menentukan jalur absolut, dan itu berarti menggunakan %2funtuk menentukan /. Ini diperlukan karena jalur dalam ftp:URL diperlakukan sebagai daftar nama yang dipisahkan dengan slash , yang masing-masingnya seharusnya diberikan ke CWDperintah terpisah . Ini %2fditerjemahkan setelah membelah. Lihat RFC 1738 dan URL FTP .

Adapun lokasi output, cukup berikan path ke -o.


Saran keamanan:

  • Jangan masukkan kata sandi Anda di URL. Menyimpannya ~/.netrcjuga tidak terlalu aman, tapi setidaknya tersembunyi dari ps -ef.

  • Kata sandi Anda dikirim dalam bentuk teks. Jika server mendukungnya, gunakan curl --ssl-reqdataucurl ftps://mysite/...

  • Menggunakan SFTP (protokol transfer file SSH) akan lebih baik.

pengguna1686
sumber
Bekerja dengan baik. Tidak yakin saya memahami sepenuhnya bagaimana% 2f digunakan, karena Anda juga menggunakan /, tapi hei itu berfungsi, jadi saya tidak akan mengeluh. Terima kasih untuk bantuannya!
Josiah
1
@Josiah: Tampaknya bahwa URL "jalan" dibagi oleh /, dan setiap argumen yang dikirim dengan CWDperintah: %2fusers/myfoldersebagai CWD /users, CWD myfolder. Lihat RFC 1738 tentang topik ini.
user1686
2
curl -T /users/myfolder/myfile.raw -u username:password "ftp://myftpsite/path/myfile.raw"

Saya menggunakan ini sepanjang waktu. Itu bekerja seperti pesona.

cUrly Stooge
sumber
1
Apakah saya orang pertama yang memperhatikan jawaban ini salah? Parameter -T berarti "unggah file", sementara OP meminta "unduh file"
Kar.ma
0

Mencoba:

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

(Jika nama file jarak jauh adalah 'myfile.raw')


sumber
Ketika saya mencoba itu, saya mendapatkan kesalahan berikut: "curl: (9) Server menolak Anda untuk mengubah ke direktori yang diberikan". Saya percaya bahwa itu sebabnya saya perlu menggunakan perintah -Q "CWD".
0

Seperti yang disarankan yan,

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

seharusnya berfungsi, tetapi beberapa server FTP menggunakan kebijakan keamanan yang tidak sesuai standar. Dalam kasus tersebut, opsi --ftp-method singlecwdatau --ftp-method nocwddapat membantu.

Dan
sumber