有没有办法禁用 wget 从父目录获取文件到给定深度?

gre*_*man 11 wget mirror tree

wget具有-np禁止从任何父目录获取文件的选项。我需要一些类似但更灵活的东西。考虑:

www.foo.com/bar1/bar2/bar3/index.html
Run Code Online (Sandbox Code Playgroud)

我想得到一切,但不是“更高”(在树层次结构中)比bar2(!)。所以bar2也应该被 fetch 但不是bar1.

有没有办法让 wget 更有选择性?

背景:我正在尝试镜像一个具有类似逻辑结构的网站——起点,然后向上,然后向下。如果还有比wget更适合这种布局的工具,也请告诉我。

更新

或者不是指定可能的深度,可能是“没有父母,除非他们匹配这个或那个 URL”。

更新 2

服务器上有一些结构,对吧?你可以把它想象成一棵树。所以通常使用“--no-parent”,你从某个点 A 开始,然后只向下走。

我的愿望,是能够上升——通过说允许上升 X 个节点,或者(100% 等效)允许上升到 B 节点(距离 BA=X)。

在所有情况下,下降的规则保持由用户定义(例如 - 仅下降 Y 级)。

如何储存?实际上这不是问题——wget默认情况下重新创建服务器结构,这里没有什么可害怕的,或者不需要修复任何东西。所以,用两个词——像往常一样。

更新 3

下面的目录结构——让我们假设在每个目录中只有一个文件,在 R 中——R.html 等等。这当然是简化的,因为您可以拥有不止一页。

        R 
       / \
      B   G
     / \
    C   F
   / \
  A   D
 /
E 
Run Code Online (Sandbox Code Playgroud)

A (A.html) 是我的起点,X = 2(所以 B 是我想要获取的最顶级节点)。在此特定示例中,这意味着获取除 R.html 和 G.html 之外的所有页面。A.html 被称为“起点”,因为我必须从它开始,而不是从 B 开始。

更新 4

从更新 3 开始使用命名。

wget 选项 www.foo.com/B/C/A/A.html

问题是有哪些选项可以从目录 B 及以下获取所有页面(知道您必须从 A.html 开始)。

APr*_*mer 12

我还没有尝试过,但使用 -I 和 -X 可以给你你想要的。我的第一次尝试将沿着

wget -m -I bar1/bar2 -X "*" http://www.foo.com/bar1/bar2/bar3/index.html
Run Code Online (Sandbox Code Playgroud)

选项说明:

-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.
Run Code Online (Sandbox Code Playgroud)