Bagaimana cara membuat file dengan nama yang benar saat diarahkan?

117

Jadi setelah beberapa saat mencari di Google dan Pengguna Super (dan memindai halaman manual) saya tidak dapat menemukan jawaban untuk sesuatu yang (saya pikir) harus sederhana:

Jika Anda pergi ke sini:

http://www.vim.org/scripts/script.php?script_id=2340

Dan coba unduh temanya:

http://www.vim.org/scripts/download_script.php?src_id=9750

Seperti itu:

wget http://www.vim.org/scripts/download_script.php?src_id=9750

Anda mungkin akan berakhir dengan file bernama download_script.php?src_id=9750.

Tapi saya ingin dipanggil molokai.vim, yang akan terjadi jika saya menggunakan browser untuk mengunduh file ini.

Opsi apa yang perlu saya tentukan untuk wget untuk efek yang diinginkan?

Saya juga akan baik-baik saja dengan perintah setara Curl.

audio.zoom
sumber

Jawaban:

162
-O file
--output-document=file

Dokumen tidak akan ditulis ke file yang sesuai, tetapi semua akan digabung menjadi satu dan ditulis ke file. Jika -digunakan sebagai file, dokumen akan dicetak ke output standar, menonaktifkan konversi tautan. (Gunakan ./-untuk mencetak ke file yang secara harfiah bernama -.)

Begitu,

wget -O somefile.extension http://www.vim.org/scripts/download_script.php?src_id=9750

Atau Anda mungkin bisa wgetmenyelesaikan ini menggunakan opsi --content-disposition jika didukung oleh versi Anda.

wget --content-disposition http://www.vim.org/scripts/download_script.php?src_id=9750

Peringatan sesuai halaman manual,

--content-disposition

Jika ini diaktifkan, dukungan eksperimental (tidak berfungsi penuh) untuk header "Content-Disposition" diaktifkan. Ini saat ini dapat mengakibatkan perjalanan pulang-pergi tambahan ke server untuk permintaan "KEPALA", dan diketahui menderita beberapa bug, itulah sebabnya saat ini tidak diaktifkan secara default.

Opsi ini berguna untuk beberapa program pengunduhan file CGI yang menggunakan tajuk "Content-Disposition" untuk menggambarkan nama file yang diunduh.

Anda dapat mencapai perilaku otomatis yang sama dengan curl, menggunakan,

curl -JLO http://www.vim.org/scripts/download_script.php?src_id=9750

-Omenggunakan nama jarak jauh, dan -Jmemaksa -Ountuk mendapatkan nama itu dari header disposisi konten daripada URL, dan -Lmengikuti arahan ulang jika diperlukan.

EightBitTony
sumber
2
Saya seharusnya menentukan bahwa ini harus otomatis
audio.zoom
Seperti yang saya pahami, wget bergantung pada halaman web untuk menginformasikannya dengan benar jika URL menunjuk ke suatu file dan perlu disimpan dengan sesuatu yang berbeda, menggunakan header disposisi konten, yang mungkin atau mungkin tidak sepenuhnya didukung oleh wget. Jadi Anda tidak dapat melakukannya secara otomatis dengan wget. Curl mungkin lebih atau kurang sukses tergantung pada halaman web.
EightBitTony
intinya adalah untuk dapat skrip hal-hal ini tanpa penguraian rumit, ikal baik-baik saja tapi sejauh ini saya belum bisa mengumpulkan opsi yang layak untuk itu
audio.zoom
2
Aha - Saya salah, lihat jawaban yang diperbarui. Inilah sebabnya mengapa situs stackexchange berfungsi dengan baik - semua orang mempelajari sesuatu, bahkan orang-orang yang menjawab pertanyaan!
EightBitTony
1
Ini bekerja untuk saya untuk podcast stackexchange, yang telah mengganggu saya untuk sementara waktu. Terima kasih.
Richard Campbell
75

Dengan wget Anda dapat melakukan ini:

wget --trust-server-names <url> 

untuk menyimpan file menggunakan nama file terakhir yang diberikan server kepada Anda.

Thi Duong Nguyen
sumber
2
Saya ingin tahu apa perbedaannya antara --trust-server-namesdan--content-disposition
JamesTheAwesomeDude
3
Sepertinya --trust-server-namesmengikuti pengalihan ke file yang berbeda, dan --content-dispositionmenamai file dengan nama yang ditentukan di header respons tanpa perlu pengalihan.
Asfand Qazi
1
Mengapa bukan fungsi standar ini?!?!
hopeseekr
8
@hopeseekr Server mungkin nakal dan panggil file .bashrc jika Anda tidak menonton dengan cermat. lists.gnu.org/archive/html/bug-wget/2012-04/msg00059.html
Patrick Conheady
3

Anda juga dapat menggunakan aria2c - sepertinya berfungsi baik dengan header Content-Disposition.

dkam
sumber