使用wget以recursion方式获取其中包含任意文件的目录

我有一个Web目录,我存储一些configuration文件。 我想使用wget来拉下这些文件并保持其当前结构。 例如,远程目录如下所示:

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

.vim保存多个文件和目录。 我想使用wget在客户端上复制它。 似乎无法find正确的组合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/ 

要recursion下载目录,拒绝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(镜像)标志,因为这样做不会混淆时间戳和无限期recursion。

 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/ 
 wget -r http://mysite.com/configs/.vim/ 

为我工作。

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

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

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

Wget 1.18可能会更好,例如,我咬了1.12版本的bug

 wget --recursive (...) 

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

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

你应该可以简单地通过添加一个-r来完成

 wget -r http://stackoverflow.com/ 

这个版本recursion下载,不会创build父目录。

 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或粘贴到terminal
  2. wgetod "http://example.com/x/"