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

StackOverflow https://stackoverflow.com/questions/273743

  •  07-07-2019
  •  | 
  •  

質問

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

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

.vimは複数のファイルとディレクトリを保持します。 wgetを使用して、クライアントでそれを複製したいと思います。これを行うためのwgetフラグの適切なコンボを見つけることができないようです。アイデアはありますか?

役に立ちましたか?

解決

-r <に加えて、 -np / -no-parent オプションを wget に渡す必要があります/ code> / -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/

他のヒント

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

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

同様の問題を抱えている他の人のために。 Wgetは robots.txt に従いますが、サイトを取得できない場合があります。心配する必要はありません。オフにできます:

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

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

-m(ミラー)フラグを使用する必要があります。これは、タイムスタンプを混乱させず、無期限に再帰するように注意します。

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

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

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

これは、サーバーのディレクトリからファイルをダウンロードするために機能した完全な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/

-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
wget -r http://mysite.com/configs/.vim/

私のために働く。

おそらく、それを妨害している.wgetrcがありますか?

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

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

必要なのは2つのフラグだけです。1つは再帰のための&quot; -r&quot; と、&quot;-no-parent&quot; (または -np '。' および&quot; ..&quot; に入らないようにします。このように:

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の終わりに向けて非常にきれいな例があります。

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

wget -r http://stackoverflow.com/

Wget 1.18の方がうまく機能する場合があります。たとえば、バージョン1.12のバグに悩まされました...

wget --recursive (...)

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

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

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

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&quot; http://example.com/x/"
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top