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


11

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

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

すべてを取得したいが(ツリー階層で)bar2(!)より「高く」ない。したがってbar2、フェッチする必要がありますが、フェッチしないでくださいbar1

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

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

更新

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

アップデート2

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

私の望みは、上昇する能力です-Xノードを上昇することが許可されている、または(100%相当)Bノードまで到達することが許可されている(距離BA = 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から開始する必要があることを知っている)。


bar2フェッチしたいが欲しくないbar1?どこbar2に居住する予定ですか?不要な2つ以上のディレクトリに同じ名前のサブディレクトリがある場合、それらのコンテンツをマージする必要がありますか?サイト全体を取得してから、必要に応じてプルーニング/移動する方がほぼ確実に簡単です。
Kilian Foth、2011

@Kilian Foth、「いまいましいサイト全体を取得する」とはどういう意味ですか?取得していますか?一般的にはやり過ぎです。MBが必要なときにTBをフェッチすることを意味します。残りについては、update2を参照してください。
greenoldman 2011

よく分からない。私が思いつくことができる唯一の解釈は、あなたはbar2ディレクトリとそのすべての内容が欲しいということです。そうでない場合は、明確にしてください。
Faheem Mitha

@Faheem Mitha、「そのコンテンツ」=「サブツリー全体」。はい、これは私が信じている唯一の解釈であり、それがまさに私の意味です。
greenoldman 2011

回答:


12

私は試していませんが、-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.

4

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

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

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

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


1
その中でリンクされているページがそのようなものを参照している場合、それでも上位のディレクトリに上昇します
EkriirkE

末尾にスラッシュが付いたヒントをありがとう!これは、隣接するディレクトリ(兄弟)からwgetによって取得された無関係なファイルに関する問題を解決するのに役立ちました。
AntonK 2018年

4

ここで正しい答えは--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.

このフラグは、OPが
求める

1

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

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

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


開始点を省略しました。リンクたどる必要あります。開始点が同時にトップレベルであると想定しましたが(これは些細なケースですnp)、トップレベルが開始点より上にある場合の一般的な解決策を探しています。
greenoldman 2011

@macias:すみません、あなたをフォローしていません。例で説明できますか?
Faheem Mitha、2011

ASCII「スクリーンショット」を追加しました。これがお役に立てば幸いです。この例では、Aが開始点です。
greenoldman 2011

@macias:(B例のように)へのパスを指定するのではなく、A?もしそうなら、なぜですか?これは、スクリプトなどを自動化したいためでしょうか?また、X = 2の意味がわかりません。レベル2ですか?あなたがさらに下のツリー内のディレクトリを取得しようとしている場合は、私はあなたがどのように区別していないんだBからG
Faheem Mitha、2011

Aは開始点です。これは開始点です。つまり、サーバーではなくクライアント側にいます。IOW -私はない、NOTサーバーを所有し、私はこのような構造をしませんでした。私は見たものに対処しなければなりません。XはUpdate 2のシンボルであり、いくつのレベルを上げることができる「深さ」です。それはA.私のためにURLの一部であるため、BはBであり、GはBではないので、あなたは、GからBを区別し、あなたはBを参照してくださいアップデート4の質問に言い換える
greenoldman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.