58

我想通过 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 一样容易自动化。

4

4 回答 4

80

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

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

于 2011-02-18T18:56:03.923 回答
9

-np(no parent) 选项可能会做你想做的事,与-L 1(我认为,在我之前没有安装 wget)相关,这将递归限制在一个级别。

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

于 2011-02-18T15:39:19.917 回答
8

而不是使用:

-nH --cut-dirs=1

采用:

-nH --cut-dirs=100

这将剪切更多目录并且不会创建任何文件夹。

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

于 2014-04-20T17:46:34.030 回答
6

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

在下面的示例中,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.
于 2019-09-07T12:41:33.940 回答