使用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" }
用法:
- 添加到
~/.bashrc
或粘贴到terminal -
wgetod "http://example.com/x/"