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

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

获取有这样的选项,-np它禁用从任何父目录获取文件。我需要类似但更灵活的东西。考虑:

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

我想要得到一切,但不比bar2(!)“更高”(在树层次结构中)。所以bar2也应该获取但不是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 

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 开始)。

答案1

我还没有尝试过,但是使用 -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.

答案2

您需要在 URL 中添加最后一个 /,否则您将无法得到您想要的内容。

如果您想获取所有内容www.myhostname.com/somedirectory那么语法应该是这样的:

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

尝试没有结束/看看会发生什么。然后用 / 尝试一下。

答案3

我觉得正确的这里的答案是--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

也许我错过了一些东西,但如果那是你想要的

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,它非常易读并且有示例。

相关内容