shell - wget用法 - wget详细信息




使用wget以递归方式获取包含任意文件的目录 (8)

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

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

.vim保存多个文件和目录。 我想用wget在客户端复制它。 似乎无法找到正确的组合wget标志来完成这件事。 有任何想法吗?


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

wget --recursive (...)

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

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


下面是完整的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


您必须将-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/

所有你需要的是两个标志,一个是递归的"-r" ,另一个是"-r" "--no-parent" (或-np ),以便不进入'.'".." 。 喜欢这个:

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节末尾有一个非常干净的例子。


要递归下载目录,拒绝index.html *文件并下载没有主机名,父目录和整个目录结构的目录:

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

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

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 "http://example.com/x/"




wget