我有一个web目录,我存储了一些配置文件。我想使用wget来拉下这些文件并保持它们当前的结构。例如,远程目录如下所示:

http://mysite.com/configs/.vim/

.vim拥有多个文件和目录。我想使用wget在客户端上复制它。似乎找不到正确的wget标志组合来完成这项工作。有什么想法吗?

有帮助吗?

解决方案

您必须将 -np / - no-parent 选项传递给 wget (除了 -r / - recursive ,当然),否则它将跟随我站点上的目录索引中的链接到父目录。所以命令看起来像这样:

wget --recursive --no-parent http://example.com/configs/.vim/

为避免下载自动生成的 index.html 文件,请使用 -R / - reject 选项:

wget -r -np -R "index.html*" http://example.com/configs/.vim/

其他提示

以递归方式下载目录,该目录拒绝index.html *文件和下载,而不包含主机名,父目录和整个目录结构:

wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data

对于有类似问题的其他人。 Wget遵循 robots.txt ,这可能不允许您抓取该网站。不用担心,你可以把它关掉:

wget -e robots=off http://www.example.com/

http://www.gnu.org/software/wget/manual/html_node /Robot-Exclusion.html

你应该使用-m(镜像)标志,因为它注意不要弄乱时间戳并无限地递归。

wget -m http://example.com/configs/.vim/

如果你在这个帖子中添加其他人提到的分数,那就是:

wget -m -e robots=off --no-parent http://example.com/configs/.vim/

这是完整的wget命令,它可以帮我从服务器的目录下载文件(忽略 robots.txt ):

wget -e robots=off --cut-dirs=3 --user-agent=Mozilla/5.0 --reject="index.html*" --no-parent --recursive --relative --level=1 --no-directories http://www.example.com/archive/example/5.3.0/

如果 - no-parent 没有帮助,您可以使用 - include 选项。

目录结构:

http://<host>/downloads/good
http://<host>/downloads/bad

您想下载 downloads / good 但不要 downloads / bad 目录:

wget --include downloads/good --mirror --execute robots=off --no-host-directories --cut-dirs=1 --reject="index.html*" --continue http://<host>/downloads/good
wget -r http://mysite.com/configs/.vim/

适合我。

也许你有一个干扰它的.wgetrc?

要使用用户名和密码递归获取目录,请使用以下命令:

wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/

您只需要两个标志,一个是&quot; -r&quot; 用于递归,&quot; - no-parent&quot; (或 -np )为了不进入'。'&quot; ..&quot; 。像这样:

wget -r --no-parent http://example.com/configs/.vim/

就是这样。它将下载到以下本地树: ./ example.com/configs/.vim 。 但是,如果您不想要前两个目录,请使用前面回复中建议的附加标志 - cut-dirs = 2

wget -r --no-parent --cut-dirs = 2 http://example.com/configs/.vim/

它只会将您的文件树下载到 ./。vim /

事实上,我从 wget手册,他们在第4.3节末尾有一个非常干净的例子。

您应该只需添加-r

即可
wget -r http://stackoverflow.com/

Wget 1.18可能会更好用,例如,我被版本1.12错误所困扰......

wget --recursive (...)

...只检索index.html而不是所有文件。

解决方法是注意到一些301重定向并尝试新位置 - 给定新URL,wget获取目录中的所有文件。

此版本以递归方式下载,不会创建父目录。

wgetod() {
    NSLASH="$(echo "$1" | perl -pe 's|.*://[^/]+(.*?)/?$|\1|' | grep -o / | wc -l)"
    NCUT=$((NSLASH > 0 ? NSLASH-1 : 0))
    wget -r -nH --user-agent=Mozilla/5.0 --cut-dirs=$NCUT --no-parent --reject="index.html*" "$1"
}

用法:

  1. 添加到〜/ .bashrc 或粘贴到终端
  2. wgetod&quot; http://example.com/x/"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top