如何在不创建父目录的情况下使用 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++)

如何在不使用存储库的情况下将Docker镜像从一个主机复制到另一个主机

如何在不包含父目录的 Python/tar 中创建 tar.gz 存档?