ディレクトリをダウンロードするCURL


38

CURLを使用して完全なWebサイトディレクトリをダウンロードしようとしています。次のコマンドは機能しません。

curl -LO http://example.com/

エラーを返します:curl: Remote file name has no length!

しかし、私がこれを行うとき:curl -LO http://example.com/someFile.typeそれは動作します。指定されたディレクトリ内のすべてのファイルをダウンロードする方法はありますか?ありがとう。

回答:


33

親は含まれず、目的のディレクトリのみを取得するために再帰的に動作します。

 wget --no-parent -r http://WEBSITE.com/DIRECTORY

1
これは受け入れられた答えであるはずです。
フアンヒメネス

gitからフォルダーをダウンロードしようとしています。私wget --no-parent -r http://WEBSITE.com/DIRECTORYも試してみました--no-parent-動作しませんでした。
サムT

32

HTTPには実際にはディレクトリの概念がありません。最初の3つ(http://example.com/)以外のスラッシュは、..相対URL を除いて特別な意味を持ちません。したがって、サーバーが特定の形式に従わない限り、「指定されたディレクトリ内のすべてのファイルをダウンロードする」方法はありません。

サイト全体をダウンロードする場合は、メインページのすべてのリンクを再帰的にたどることが最善の策です。Curlではできませんが、wgetではできます。これは、Webサイトがあまり動的でない場合に機能します(特に、wgetはJavascriptコードによって構築されたリンクを表示しません)。で始まり、wget -r http://example.com/さらに関連するオプション(再帰の深さ、除外リストなど)については、wgetマニュアルの「再帰的な検索オプション」と「再帰的な受け入れ/拒否オプション」を参照してください。

Webサイトが自動ダウンロードをブロックしようとする場合、ユーザーエージェント文字列(-U Mozilla)を変更し、無視する必要がある場合があります(robots.txt空のファイルexample.com/robots.txtを作成し、-ncwgetがサーバーからのダウンロードを試行しないようにオプションを使用します)。


wgetでできること。?
スリカン

@Srikan wgetはHTMLを解析して、含まれているリンクを見つけ、それらのリンク(の選択)を再帰的にダウンロードします。
ジル「SO-停止されて悪」

ファイルに内部リンクがない場合、再帰的なダウンロードはすべてのファイルの取得に失敗します。いくつかのtxtファイルのHTTPフォルダがあるとしましょう。wgetはすべてのファイルの取得に成功します。このコメントの後に試してみましょう
スリカン

@Srikan HTTPにはディレクトリの概念はありません。再帰的ダウンロードとは、Webページ内のリンクをたどることを意味します(Webサーバーがこれを行う場合、ディレクトリリストを表示するためにサーバーによって生成されるWebページを含む)。
ジル「SO-停止されて悪」

wgetは、フラグ付きのrobots.txtの無視をサポートしています-e robots=off。または、で拒否することでダウンロードを回避できます-R "robots.txt"
ライアン

17

この場合、curl最適なツールではありません。次のようにwget-r引数と共に使用できます。

wget -r http://example.com/ 

これは最も基本的な形式であり、追加の引数も使用できます。詳細については、manpageman wget)を参照してください。


5

これは不可能です。Webサーバーがディレクトリの内容を返す標準の、一般に実装されている方法はありません。ほとんどのサーバーは、そうするように構成されている場合、ディレクトリのHTMLインデックスを生成しますが、この出力は標準ではなく、いかなる方法でも保証されていません。このHTMLを解析できますが、形式はサーバーごとに変更され、常に有効になるとは限らないことに注意してください。


Site Suckerと呼ばれるこのアプリを見てください。sitesucker.us。どうやってやっているの?
フー

HTMLファイルを解析し、その中のすべてのリンクをダウンロードします。
ブラッド

wgetまたはを使用しcurlますか?
フー

7
@Brad:curlはHTMLを解析しませんが、wgetはこれを正確に行います(再帰的取得と呼ばれます)。
ジル「SO-悪であるのをやめる」

1
ああ、まあ私は訂正されて立っています! gnu.org/software/wget/manual/html_node/…OP は、これがまだ探しているものを取得できないことに注意する必要があります...返されるページで利用可能なリンクのみをたどります。
ブラッド

2

Firefox拡張機能のDownThemAll!を使用できます。ワンクリックでディレクトリ内のすべてのファイルをダウンロードできます。また、カスタマイズ可能であり、ダウンロードするファイルの種類を指定できます。これは私が見つけた最も簡単な方法です。


0

あなたはここでウェブサイトリッパーの使用を見つけるかもしれません、これはすべてをダウンロードして、ローカル使用のためにコンテンツ/内部リンクを修正します。良いものはここで見つけることができます:http//www.httrack.com

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