リダイレクト時に正しい名前のファイルを取得する方法は?


117

だから、Googleとスーパーユーザーで検索して(そしてmanページをスキャンして)しばらくしてから、私は簡単だと思う(私は思う)何かに対する答えを見つけることができませんでした:

ここに行くと:

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

そして、テーマをダウンロードしてみてください:

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

そのようです:

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

おそらく、というファイルが作成されdownload_script.php?src_id=9750ます。

しかしmolokai.vim、このファイルをダウンロードするためにブラウザを使用した場合に発生することになる、という名前を付けます。

目的の効果を得るには、wgetにどのオプションを指定する必要がありますか?

Curlの同等のコマンドでも問題ありません。

回答:


162
-O file
--output-document=file

ドキュメントは適切なファイルに書き込まれませんが、すべてが連結されてファイルに書き込まれます。場合は-ファイルとして使用され、文書はリンク変換を無効にし、標準出力に出力されます。(./-文字通りの名前のファイルに印刷するために使用-.

そう、

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

またはwget、お使いのバージョンでサポートされている場合、--content-dispositionオプションを使用してこれを解決できる場合があります。

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

manページによる注意事項、

--content-disposition

これがonに設定されている場合、「Content-Disposition」ヘッダーの実験的な(完全に機能しない)サポートが有効になります。これにより、現在「HEAD」リクエストのためにサーバーへの余分なラウンドトリップが発生する可能性があり、いくつかのバグがあることが知られているため、現在デフォルトでは有効になっていません。

このオプションは、「Content-Disposition」ヘッダーを使用してダウンロードされたファイルの名前を記述するファイルダウンロードCGIプログラムに役立ちます。

を使用して、同じ自動化された動作を実現できますcurl

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

-Oリモート名を使用し、-J強制的に-Oコンテンツ-dispositionヘッダーではなく、URLからその名前を取得するために、そして-L必要に応じてリダイレクトをたどります。


2
これは自動である必要があると指定すべき
でした

私が理解しているように、wgetはWebページに依存して、URLがファイルを指し、コンテンツ処理ヘッダーを使用して別のファイルで保存する必要があるかどうかを正しく通知します。したがって、wgetを使用して自動的に実行することはできません。Curlは、Webページに応じて、多少成功する場合があります。
EightBitTony

ポイントは、複雑な解析をせずにこれらのことをスクリプト化できることです。カールは問題ありませんが、これまでのところ適切なオプションを収集できませんでした
audio.zoom

2
Aha-私は間違っています、更新された答えを見てください。これがstackexchangeサイトがうまく機能する理由です-誰もが何かを学び、人々が質問に答えます!
EightBitTony

1
これは、しばらくの間私を悩ませていたstackexchangeポッドキャストのために私のために働いた。ありがとう。
リチャードキャンベル

75

wgetを使用すると、これを行うことができます。

wget --trust-server-names <url> 

サーバーが提供する最後のファイル名を使用してファイルを保存します。


2
私は違いが間にあるのだろうか--trust-server-names--content-disposition
JamesTheAwesomeDude

3
--trust-server-names次のように見えます別のファイルにリダイレクトし、--content-dispositionリダイレクトを必要とせずに、応答ヘッダーで指定された名前でファイルに名前を付けます。
Asfandカジ

1
なぜこのデフォルト機能ではないのですか?!?!
hopeseekr

8
@hopeseekr注意深く監視していない場合、サーバーはいたずらで、ファイル.bashrcを呼び出す場合があります。lists.gnu.org/archive/html/bug-wget/2012-04/msg00059.html
パトリックコンヘディ



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.