Làm thế nào để quên một tập tin với tên chính xác khi được chuyển hướng?


117

Vì vậy, sau một thời gian tìm kiếm trên Google và Super User (và quét các trang man), tôi không thể tìm thấy câu trả lời cho điều gì đó (tôi nghĩ) nên đơn giản:

Nếu bạn đến đây:

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

Và cố gắng tải về chủ đề:

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

Thích như vậy:

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

Bạn có thể sẽ kết thúc với một tập tin được gọi là download_script.php?src_id=9750.

Nhưng tôi muốn nó được gọi molokai.vim, đó là điều sẽ xảy ra nếu tôi sử dụng trình duyệt để tải xuống tệp này.

Những tùy chọn nào tôi cần chỉ định cho wget cho hiệu ứng mong muốn?

Tôi cũng sẽ ổn với lệnh tương đương Curl.

Câu trả lời:


162
-O file
--output-document=file

Các tài liệu sẽ không được ghi vào các tệp thích hợp, nhưng tất cả sẽ được nối với nhau và được ghi vào tệp. Nếu -được sử dụng dưới dạng tệp, tài liệu sẽ được in thành đầu ra tiêu chuẩn, vô hiệu hóa chuyển đổi liên kết. (Sử dụng ./-để in thành một tệp có tên theo nghĩa đen -.)

Vì thế,

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

Hoặc bạn có thể giải wgetquyết vấn đề này bằng cách sử dụng tùy chọn --content-dispose nếu được phiên bản của bạn hỗ trợ.

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

Hãy cẩn thận theo trang người đàn ông,

--content-disposition

Nếu điều này được đặt thành bật, hỗ trợ thử nghiệm (không đầy đủ chức năng) cho các tiêu đề "Xử lý nội dung" được bật. Điều này hiện có thể dẫn đến các chuyến đi khứ hồi thêm đến máy chủ cho yêu cầu "ĐẦU" và được biết là mắc một vài lỗi, đó là lý do tại sao nó không được bật theo mặc định.

Tùy chọn này hữu ích cho một số chương trình CGI tải xuống tệp sử dụng tiêu đề "Xử lý nội dung" để mô tả tên của tệp được tải xuống là gì.

Bạn có thể đạt được hành vi tự động tương tự với curl, sử dụng,

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

-Osử dụng tên từ xa và -Jbuộc -Olấy tên đó từ tiêu đề sắp xếp nội dung thay vì URL và -Ltheo dõi chuyển hướng nếu cần.


2
Tôi nên xác định rằng điều này cần phải tự động
audio.zoom

Theo tôi hiểu, wget dựa vào trang web để thông báo chính xác cho nó nếu URL trỏ đến một tệp và nó cần được lưu với một cái gì đó khác, sử dụng tiêu đề bố trí nội dung, mà wget có thể hoặc không thể hỗ trợ đầy đủ. Vì vậy, bạn không thể làm điều đó một cách tự động với wget. Curl có thể có nhiều hay ít thành công tùy thuộc vào trang web.
EightBitTony

vấn đề là có thể viết kịch bản những thứ này mà không cần phân tích cú pháp phức tạp, curl vẫn ổn nhưng cho đến nay tôi vẫn chưa thể thu thập các tùy chọn hợp lý cho điều đó
audio.zoom

2
Aha - Tôi sai rồi, xem câu trả lời cập nhật. Đây là lý do tại sao các trang web stackexchange hoạt động tốt - mọi người đều học được điều gì đó, thậm chí mọi người trả lời các câu hỏi!
EightBitTony

1
Điều này làm việc cho tôi cho podcast stackexchange, đã được tôi làm phiền trong một thời gian. Cảm ơn.
Richard Campbell

75

Với wget bạn có thể làm điều này:

wget --trust-server-names <url> 

để lưu tệp bằng tên tệp cuối cùng mà máy chủ cung cấp cho bạn.


2
Tôi tự hỏi sự khác biệt giữa --trust-server-names--content-disposition
JamesTheAwgieDude

3
Có vẻ như --trust-server-namessau chuyển hướng đến một tệp khác và --content-dispositionđặt tên tệp với tên được chỉ định trong tiêu đề phản hồi mà không cần chuyển hướng.
Asfand Qazi

1
Tại sao chức năng mặc định này không?!?!
Hopeeekr

8
@hopeseekr Máy chủ có thể nghịch ngợm và gọi tệp .bashrc nếu bạn không xem kỹ. list.gnu.org/archive/html/orms-wget/2012-04/msg00059.html
Patrick Conheady

3

Bạn cũng có thể sử dụng aria2c - nó dường như hoạt động tốt với các tiêu đề Bố trí nội dung.



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.