如何使用wget镜像一个目录而不创建父级目录?

65

我想通过FTP镜像一个文件夹,就像这样:

wget --mirror --user=x --password=x ftp://ftp.site.com/folder/subfolder/evendeeper

但我不想创建这样的目录结构:

ftp.site.com -> 文件夹 -> 子文件夹 -> 更深层次

我只想要:

更深层次

并且它下面的所有内容都是所需的结果目录结构。如果为服务器上evendeeper的子目录创建子目录,那么让evendeeper的内容最终出现在当前目录中也是可以接受的。

我知道有-np选项,根据文档,它只会防止跟随链接到父页面(对于我通过FTP镜像的二进制文件无关紧要)。我还知道有-nd选项,但这会完全阻止创建任何目录结构,即使是evendeeper的子目录也不例外。

只要是基于命令行的、作为Ubuntu包易于使用和自动化的替代方法,我都会考虑。


使用 lftp 命令:lftp -c mirror <url> - HappyFace
4个回答

89

对于这样的路径: ftp.site.com/a/b/c/d

-nH 将所有文件下载到当前目录下的a/b/c/d目录,而 -nH --cut-dirs=3会将所有文件下载到当前目录下的d目录。


4
谢谢,--cut-dirs正是我一直在寻找的解决方案。 - Tom Boutell
5
如果您需要从目录d获取所有文件,则我建议更改为--cut-dirs=4。 - Mike
5
对我来说,-nH 只会忽略主机目录。你可以设置 --cut-dirs=100 来防止几乎所有的前置目录。 - Rex
5
ftp.site.com/a/b/c/d/ 这样的 URL,很明显只想要 d/ 及其子文件夹中的内容。是否有一个自动剪切选项或类似的选项可供 wget 使用,可以自动检测剪切深度? - con-f-use
2
@con-f-use,我原本希望@Rex(以及Tony TCG在下面的答案中提到的)建议的--cut-dirs = 100技巧可以实现此目的,但不幸的是,它的工作方式类似于-nd,即它会扁平化整个层次结构,包括您正在下载的子目录以下的子目录。看起来没有仅使用wget自动解决方案... - waldyrious

11

我有类似的需求,以下组合似乎是完美的选择:

在下面的示例中,仅下载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.

10

-np(无父级)选项可能会实现您想要的功能,并与-L 1(我认为,没有安装wget),限制递归到一级。

编辑。好的。啊...也许我应该等到喝咖啡之后再来。有一个--cut或类似选项,允许您从输出路径中“剪切”指定数量的目录,因此对于/a/b/c/d,2的剪切将强制wget在本地机器上创建c/d


6
你的意思是:--cut-dirs=2 — 此外,-L表示--relative,所以你可能想用-l--level=1 - Denilson Sá Maia

9

使用以下方法代替:

-nH --cut-dirs=1

使用:

-nH --cut-dirs=100

这将会删除更多的目录,并且不会创建任何文件夹。

注意:100 = 跳过创建的文件夹数目。您可以将100更改为任何数字。


10
那为什么不直接使用“-nd”呢? - ffledgling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接