如何在不创建父目录的情况下使用 wget 镜像目录?
Posted
技术标签:
【中文标题】如何在不创建父目录的情况下使用 wget 镜像目录?【英文标题】:How do I mirror a directory with wget without creating parent directories? 【发布时间】:2011-06-29 22:02:07 【问题描述】:我想通过 FTP 镜像一个文件夹,像这样:
wget --mirror --user=x --password=x ftp://ftp.site.com/folder/subfolder/evendeeper
但我不想创建这样的目录结构:
ftp.site.com -> 文件夹 -> 子文件夹 -> evendeeper
我只想:
更深
它下面的任何东西都是结果结构。只要在服务器上为evendeeper
的子目录创建了子目录,evendeeper
的内容在当前目录中结束也是可以接受的。
我知道-np
选项,根据只是阻止它跟随父页面链接的文档(我通过 FTP 镜像的二进制文件不是问题)。我也知道-nd
选项,但这完全阻止了创建任何目录结构,即使是evendeeper
的子目录。
我会考虑替代方案,只要它们是基于命令行的、可作为 Ubuntu 软件包轻松获得并且像 wget 一样易于自动化的。
【问题讨论】:
与lftp
: lftp -c mirror <url>
【参考方案1】:
对于类似的路径:ftp.site.com/a/b/c/d
-nH
会将所有文件下载到当前目录下的a/b/c/d
目录,-nH --cut-dirs=3
会将所有文件下载到当前目录下的d
目录下。
【讨论】:
谢谢,--cut-dirs 是我一直在寻找的灵丹妙药。 如果您需要目录 d 中的所有文件,我会改为 --cut-dirs=4 -nH 只会忽略我的主机目录。你可以设置 --cut-dirs=100 来阻止几乎所有的 pre 目录 -- 勾选 对于像ftp.site.com/a/b/c/d/
这样的URL,很明显,人们只想要d/
及其子文件夹中的内容。 wget 是否有自动切割选项或类似的东西,可以自动检测切割深度?
@con-f-use 我希望@Rex(以及Tony TCG's answer below)建议的--cut-dirs=100
技巧能够实现这一点,但是唉,它像-nd
一样工作,即它变平了整个层次结构,包括您正在下载的那个之下的子目录。看起来没有单独使用 wget 的自动解决方案......【参考方案2】:
-np
(无父)选项可能会做你想做的事,与-L 1
(我认为,在我之前没有安装 wget)相关,这将递归限制在一个级别。
编辑。好的。 gah...也许我应该等到我喝完咖啡.. 有一个--cut
或类似的选项,它允许您从输出路径中“剪切”指定数量的目录,所以对于/a/b/c/d
,一个cut of 2 将强制 wget 在您的本地计算机上创建 c/d
【讨论】:
你的意思是:--cut-dirs=2
——另外,-L
是 --relative
,所以你的意思可能是 -l
或 --level=1
【参考方案3】:
而不是使用:
-nH --cut-dirs=1
使用:
-nH --cut-dirs=100
这将剪切更多目录并且不会创建任何文件夹。
注意:100 = 要跳过创建的文件夹数。 您可以将 100 更改为任意数字。
【讨论】:
那为什么不直接使用 -nd 呢?【参考方案4】:我有类似的要求,下面的组合似乎是完美的选择:
在下面的例子中,http://url/dir1/dir2(单独)中的所有文件都被下载到本地目录/dest/dir
wget -nd -np -P /dest/dir --recursive http://url/dir1/dir2
感谢@ffledgling 关于“-nd”的提示
对于上面的例子:
wget -nd -np --mirror --user=x --password=x ftp://ftp.site.com/folder/subfolder/evendeeper
手册摘录:
-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.
【讨论】:
以上是关于如何在不创建父目录的情况下使用 wget 镜像目录?的主要内容,如果未能解决你的问题,请参考以下文章
java - 如何在不创建对象的情况下找出文件和目录的大小?
如何在不实际提取文件的情况下使用 VBScript 读取 .zip 文件的内容?
如何在不接触该目录中的文件的情况下查找文件夹更改(使用 Windows 和 C++)