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

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

.vim包含多个文件和目录。我想用wget在客户端复制它。似乎无法找到正确的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"
}

用法:

添加到~/。Bashrc或粘贴到终端 wgetod“http://example.com/x/”

其他回答

你只要加一个-r就可以了

wget -r http://stackoverflow.com/

下面的选项似乎是处理递归下载时的完美组合:

wget -nd -n -P -P /dest/dir -充值http://url/dir1 dir2

为方便起见,手册页中的相关片段:

   -nd
   --no-directories
       Do not create a hierarchy of directories when retrieving recursively.  With this option turned on, all files will get saved to the current directory, without clobbering (if a name shows up more than once, the
       filenames will get extensions .n).


   -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.

您应该使用-m (mirror)标志,因为这样可以避免混淆时间戳并无限地递归。

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

如果你加上其他人在这篇文章中提到的要点,它将是:

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

对我有用。

也许你有一个。wgetrc干扰它?

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