wgetを使用して、任意のファイルを含むディレクトリを再帰的にフェッチする


573

いくつかの設定ファイルを保存するWebディレクトリがあります。wgetを使用してこれらのファイルをプルダウンし、現在の構造を維持したいと思います。たとえば、リモートディレクトリは次のようになります。

http://mysite.com/configs/.vim/

.vimは複数のファイルとディレクトリを保持します。wgetを使用してクライアント上でそれを複製したいと思います。これを実行するためのwgetフラグの正しい組み合わせを見つけることができないようです。何か案は?

回答:


988

(もちろん/ に加えて)-np/ --no-parentオプションをに渡す必要があります。そうしないと、私のサイトのディレクトリインデックス内の親ディレクトリへのリンクをたどります。したがって、コマンドは次のようになります。wget-r--recursive

wget --recursive --no-parent http://example.com/configs/.vim/

自動生成されたindex.htmlファイルのダウンロードを回避するには、-R/ --rejectオプションを使用します。

wget -r -np -R "index.html*" http://example.com/configs/.vim/

52
-nH(ホスト名を切り取る)--cut-dirs = X(Xディレクトリを切り取る)を追加します。X ..のディレクトリを手動で数える必要があるのは少し面倒です
lkraav

3
これらのどれもw3.org/History/1991-WWW-NeXT/Implementationで機能しないのはなぜですか?robots.txtのみをダウンロードします
matteo

31
@matteoはrobots.txtがおそらくWebサイトのクロールを許可しないためです。クロールを強制するには、-e robots = offを追加する必要があります。
14

特定のディレクトリを除外するには、-X / absolute / path / to / folderを追加します
vishnu narayanan

3
コンテンツ全体をダウンロードしたくない場合は、次のコマンドを使用できます。-l1ディレクトリをダウンロードするだけ(例ではexample.com)-l2ディレクトリとすべてのレベル1サブフォルダ( 'example.com/something'をダウンロードしますが、 'example.com/somthing/foo')など。-lオプションを挿入しない場合、wgetは自動的に-l 5を使用します。-l 0を挿入すると、インターネット全体がダウンロードされます。これは、wgetが検出したすべてのリンクをたどるからです。stackoverflow.com/a/19695143/6785908
so-random-dude

123

ディレクトリを再帰的にダウンロードすると、index.html *ファイルが拒否され、ホスト名、親ディレクトリ、およびディレクトリ構造全体なしでダウンロードされます。

wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data

私は仕事にこれを取得することはできません:wgetの-r -nH --cut-dirsに= 3 --no-親--reject = "index.htmlの*" w3.org/History/1991-WWW-NeXT/Implementation - -cut-dirs = 2も機能しません。実際にルートフォルダにあるrobots.txtのみをダウンロードします。私は行方不明ですか?
matteo

34
@matteo追加してみてください:-e robots = off
Paul J

ディレクトリ内のすべてのディレクトリを再帰的に取得するには、wget -r -nH --reject = "index.html *" mysite.io:1234/dir1/dir2
Prasanth Ganesan

115

同様の問題を抱えている他の人のために。Wgetが続くrobots.txtため、サイトを取得できません。心配しないで、オフにできます:

wget -e robots=off http://www.example.com/

http://www.gnu.org/software/wget/manual/html_node/Robot-Exclusion.html


robots.txtを無視する場合は、少なくともリクエストを抑制すべきです。この回答で示唆されている行動は非常に失礼です。
誰もいない

@Nobodyそれで、これに対する丁寧な答えは何ですか?
Phani Rithvij

@PhaniRithvijリクエストをレート制限します。wgetにはそのためのパラメーターがあります。一部の人はまだ問題を抱えている可能性があり、robotsファイルが現在実行していることを実行することは許可されていないことを明示的に伝えていることを考慮すると、法的問題に遭遇する可能性さえあることに注意してください。
誰も

37

-m(ミラー)フラグを使用する必要があります。これは、タイムスタンプを乱さないようにし、無限に再帰するようにするためです。

wget -m http://example.com/configs/.vim/

このスレッドで他の人が言及したポイントを追加すると、次のようになります。

wget -m -e robots=off --no-parent http://example.com/configs/.vim/

35

サーバーのディレクトリからファイルをダウンロードするために機能した完全なwgetコマンドを次に示します(を無視robots.txt)。

wget -e robots=off --cut-dirs=3 --user-agent=Mozilla/5.0 --reject="index.html*" --no-parent --recursive --relative --level=1 --no-directories http://www.example.com/archive/example/5.3.0/

8

--no-parent助けにならない場合は、--includeオプションをできます。

ディレクトリ構造:

http://<host>/downloads/good
http://<host>/downloads/bad

そして、あなたはダウンロードしたいdownloads/gooddownloads/badディレクトリはしたくない:

wget --include downloads/good --mirror --execute robots=off --no-host-directories --cut-dirs=1 --reject="index.html*" --continue http://<host>/downloads/good


5

ユーザー名とパスワードを使用してディレクトリを再帰的に取得するには、次のコマンドを使用します。

wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/

2

Wget 1.18はよりうまく動作する可能性があります。たとえば、バージョン1.12のバグに噛まれて...

wget --recursive (...)

...すべてのファイルではなく、index.htmlのみを取得します。

回避策は、301リダイレクトに気付き、新しい場所を試すことでした。新しいURLを指定すると、wgetはディレクトリ内のすべてのファイルを取得しました。


2

必要なのは1つがあり、二つのフラグで"-r"再帰とするために"--no-parent"(または-npに行くしないようにするために)'.'".." 。このような:

wget -r --no-parent http://example.com/configs/.vim/

それでおしまい。次のローカルツリーにダウンロードされます./example.com/configs/.vim。ただし、最初の2つのディレクトリが不要な場合は--cut-dirs=2、以前の返信で提案されている追加のフラグを使用します。

wget -r --no-parent --cut-dirs=2 http://example.com/configs/.vim/

そして、それはあなただけにあなたのファイルツリーをダウンロードします ./.vim/

実際、私はこの回答の最初の行をwgetマニュアルから正確に取得しました。セクション4.3の終わり近くに、非常に明確な例があります。


2

次のオプションは、再帰的なダウンロードを処理する場合に最適な組み合わせのようです。

wget -nd -np -P / dest / dir --recursive http:// url / dir1 / dir2

便宜上、manページの関連スニペット:

   -nd
   --no-directories
       Do not create a hierarchy of directories when retrieving recursively.  With this option turned on, all files will get saved to the current directory, without clobbering (if a name shows up more than once, the
       filenames will get extensions .n).


   -np
   --no-parent
       Do not ever ascend to the parent directory when retrieving recursively.  This is a useful option, since it guarantees that only the files below a certain hierarchy will be downloaded.

1

-rを追加するだけでそれができるはずです

wget -r http://stackoverflow.com/

9
これは実際にはディレクトリをダウンロードしませんが、ダウンロードしたいディレクトリより上のディレクトリを含む、サーバー上で見つけることができるすべてのファイルです。
Luc

1

このバージョンは再帰的にダウンロードし、親ディレクトリを作成しません。

wgetod() {
    NSLASH="$(echo "$1" | perl -pe 's|.*://[^/]+(.*?)/?$|\1|' | grep -o / | wc -l)"
    NCUT=$((NSLASH > 0 ? NSLASH-1 : 0))
    wget -r -nH --user-agent=Mozilla/5.0 --cut-dirs=$NCUT --no-parent --reject="index.html*" "$1"
}

使用法:

  1. ~/.bashrc端末に追加または貼り付け
  2. wgetod "http://example.com/x/"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.