GNU/Linux >> Linux の 問題 >  >> Linux

実際のZipファイルの代わりにHTMLをダウンロードしますか?これが何をすべきかです

Curlは、Linuxターミナルでファイルをダウンロードするための優れたツールです。

元のファイルと同じ名前のファイルをダウンロードするための通常の構文は非常に単純です:

curl -O URL_of_the_file

これはほとんどの場合機能します。ただし、GitHubまたはSourceForgeからファイルをダウンロードしているときに、正しいファイルがフェッチされない場合があります。

たとえば、archinstallスクリプトをtargz形式でダウンロードしようとしていました。ファイルはリリースページにあります。

このソースコードリンクをブラウザで開くと、.tar.gz形式のソースコードが表示されます。

ただし、ターミナルを使用してcurlコマンドを使用して同じファイルをダウンロードすると、正しいアーカイブ形式ではない小さなファイルが表示されます。

tar -zxvf v2.4.2.tar.gz 

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now

正確なファイルタイプを知るためにfileコマンドを実行すると、それがHTMLドキュメントであることがわかります。

file v2.4.2.tar.gz 
v2.4.2.tar.gz: HTML document, ASCII text, with no line terminators

アーカイブzipまたはtarballの代わりにHTMLドキュメント?問題はどこにありますか?簡単な修正方法を紹介します。

curlを使用してアーカイブファイルを適切にダウンロードする

ここでの問題は、使用しているURLが実際のアーカイブファイルにリダイレクトされることです。これを取得するには、追加のオプションを使用する必要があります。

curl -JLO URL_of_the_file

オプションは任意の順序にすることができます。 J LO(ジェニファー・ロペス)を覚えるのは簡単です。

curlコマンドのマニュアルページに基づいたオプションの簡単な説明は次のとおりです。

  • J:このオプションは、URLからファイル名を抽出する代わりに、サーバー指定のContent-Dispositionファイル名を使用するように-O、-remote-nameオプションに指示します。
  • L:リクエストされたページが別の場所(Location:ヘッダーと3XX応答コードで示される)に移動したことをサーバーが報告した場合、このオプションにより、curlは新しい場所でリクエストをやり直します。
  • O:このオプションを使用すると、ダウンロード用の出力ファイル名を指定する必要はありません。

下のスクリーンショットでわかるように、今回はcurl-JLOオプションを使用して正しいファイルをダウンロードできました。

ボーナスのヒント:ログインする必要がありますか?

これは公開ファイルに対して機能します。ただし、プライベートリポジトリまたはGitLabからファイルをダウンロードしようとすると、ログインページへのリダイレクトに関するメッセージが表示される場合があります。

<html><body>You are being <a href="https://gitlab.com/users/sign_in">redirected</a>.</body></html>

このような場合は、APIトークンに-Hオプションを付けてください。

この簡単なヒントが、Curlでアーカイブファイルを正しくダウンロードするのに役立つことを願っています。それでもcurlのダウンロードで問題が発生する場合はお知らせください。


Linux
  1. `.bashrc` などの 'rc' は何を意味していますか?

  2. Windows の Linux の File コマンドに相当するものは何ですか?

  3. /etc/hosts のサイズ制限は?

  1. ファイルパーミッションの「s」属性はどういう意味ですか?

  2. Linux での curl -k -i -X の意味は何ですか?

  3. `hostname` のデフォルトのファイルは何ですか?

  1. Linux – Linux上のどのファイルシステムが作成時間を保存しますか?

  2. シェルでファイルを実行するとどうなりますか?

  3. `touch`コマンドの正当な使用法は何ですか?