webdevqa.jp.net

Wgetを使って任意のファイルを含むディレクトリを再帰的に取得する

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

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

.vimは複数のファイルとディレクトリを保持します。私はwgetを使ってクライアント上でそれを再現したいです。これを実現するためのwgetフラグの正しい組み合わせが見つかりません。何か案は?

514
jerodsanto

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

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

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

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

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

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

同様の問題を抱えている他の誰にとっても。 Wgetはrobots.txtの後に続きますので、サイトをつかむことはできません。心配しないで、あなたはそれをオフにすることができます:

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

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

110
Sean Villani

タイムスタンプを台無しにしないで無期限に再帰するように注意するので、-m(mirror)フラグを使うべきです。

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

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

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

これが私のためにサーバのディレクトリからファイルをダウンロードするために働いた完全な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/
29
Erich Eichinger

--no-parentが役に立たない場合は、--includeオプションを使用してください。

ディレクトリ構造

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

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

wget --include downloads/good --mirror --execute robots=off --no-Host-directories --cut-dirs=1 --reject="index.html*" --continue http://<Host>/downloads/good
6
user2288008
wget -r http://mysite.com/configs/.vim/

私のために働きます。

おそらくあなたはそれに干渉している.wgetrcを持っている?

5

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

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

必要なのは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 manual から正確に最初の行を得ました、彼らはセクション4.3の終わりに向かって非常にきれいな例を持っています。

2
Jordan Gee

-rを追加するだけでそれを実行できるはずです。

wget -r http://stackoverflow.com/
1
kasperjj

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

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/"
1
rkok

Wget 1.18はもっとうまくいくかもしれません、例えば、バージョン1.12のバグに噛み付かれました。

wget --recursive (...)

...すべてのファイルの代わりにindex.htmlのみを取得します。

この問題を回避するには、301個のリダイレクトを確認して新しい場所を試します。新しいURLを指定すると、wgetはディレクトリ内のすべてのファイルを取得します。

1
devon