web-dev-qa-db-ja.com

wgetが親ディレクトリから指定された深さまでファイルを取得できないようにする方法はありますか?

wgetには、親ディレクトリからのファイルの取得を無効にする-npなどのオプションがあります。私は似たようなものが必要ですが、もう少し柔軟です。考慮してください:

www.foo.com/bar1/bar2/bar3/index.html

bar2(!)よりも(ツリー階層で)上位ではないすべてのものを取得したいと思います。したがって、bar2もフェッチする必要がありますが、bar1はフェッチしないでください。

Wgetをより選択的にする方法はありますか?

背景:私は、同様の論理構造を持つWebサイトをミラーリングしようとしています-開始点、次に上、次に下です。 wget以外のツールがあり、そのようなレイアウトに適している場合は、私にも知らせてください。

更新

または、可能な深さを指定する代わりに、「これまたはそのURLに一致しない限り、親はありません」のようなものかもしれません。

アップデート2

サーバーには何らかの構造がありますよね?それをツリーとして視覚化できます。したがって、通常、「-no-parent」を使用すると、あるポイントAから開始して、下がるだけです。

私の願いは、上がる能力です-言うことで表現されます、それはXノードを上がることが許されています、または(これは100%相当です)Bノード(距離B-A = X)に上がることが許されていることです。

すべての場合において、ダウンするためのルールは、ユーザーによって定義されたままです(たとえば、Yレベルだけダウンします)。

保管方法は?実際には問題ではありません-wgetはデフォルトでサーバー構造を再作成します。ここで恐れることはありません。または何も修正する必要はありません。それで、2ワードで-いつものように。

アップデート3

以下のディレクトリ構造-各ディレクトリにRのファイルが1つだけあると仮定しましょう-R.htmlなど。もちろん、複数のページを持つことができるため、これは単純化されています。

        R 
       / \
      B   G
     / \
    C   F
   / \
  A   D
 /
E 

A(A.html)は私の出発点、X = 2です(つまり、Bはフェッチしたい最上位のノードです)。この特定の例では、これはR.htmlとG.htmlを除くすべてのページをフェッチすることを意味します。 A.htmlは「開始点」と呼ばれます。これは、Bからではなく、そこから開始する必要があるためです。

アップデート4

ネーミングはUpdate 3から使用されます。

wgetオプションwww.foo.com/B/C/A/A.html

問題は、ディレクトリB以下からすべてのページを取得するためのオプションは何ですか(A.htmlから開始する必要があることを知っている)。

11
greenoldman

私は試していませんが、-Iと-Xを使用すると、必要なものが得られます。私の最初の試みは、

wget -m -I bar1/bar2 -X "*" http://www.foo.com/bar1/bar2/bar3/index.html

オプションの説明:

-m: 
   --mirror
       Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets
       infinite recursion depth and keeps FTP directory listings.  It is currently equivalent to -r -N -l
       inf --no-remove-listing.
-I: list
   --include-directories=list
       Specify a comma-separated list of directories you wish to follow when downloading.  Elements of
       list may contain wildcards.
-X: list
   --exclude-directories=list
       Specify a comma-separated list of directories you wish to exclude from download.  Elements of list
       may contain wildcards.
12
AProgrammer

ここでの答えは--no-parentオプションだと思います:

   -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.
4

URLに最後の/を追加する必要があります。追加しないと、必要なものが得られません。

すべてのコンテンツをwww.myhostname.com/somedirectoryで取得したい場合、構文は次のようになります。

wget -r -nH http://www.myhostname.com/somedirectory/

終わりなしでそれを試してください/何が起こるか見てください。次に、/で試してください。

4
Adrian

何か足りないかもしれませんが、それがあなたが望むものなら

wget -c -np -r www.foo.com/bar1/bar2

私のために働く(あなたの例を使用して)。もちろん、これらのオプションを使用すると、www.foo.com以降のすべてのディレクトリ構造も取得できます。トップレベルでbar2が必要な場合は、

wget -c -np -r -nH --cut-dirs=1 www.foo.com/bar1/bar2

-nHwww.foo.comを削除し、--cut-dirs=1bar1を削除するため、bar2とそのサブディレクトリが現在のディレクトリにダウンロードされます。詳細については、非常に読みやすく例のあるman wgetを参照してください。

1
Faheem Mitha