获取有这样的选项,-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
,它非常易读并且有示例。