下载文件并创建与源文件相同的文件结构


21

我有一个配置文件,其中包含我要下载的URI列表。例如,

  http://xyz.abc.com/Dir1/Dir3/sds.exe
  http://xyz.abc.com/Dir2/Dir4/jhjs.exe
  http://xyz.abc.com/Dir1/itr.exe

我想读取配置文件并复制每个URL,但同时创建与主机上相同的目录结构。例如,对于配置文件中的第一行,我想在本地计算机上创建目录结构Dir1 / Dir3(如果不存在),然后将sds.exe复制到... / Dir1 / Dir3 /

我发现可以使用“ wget -i”下载文件中的所有URL,但是如何使用该文件创建相应的目录结构

Answers:


27

来自man wget

-x,--force-directories:

[...]

即使没有创建目录,也要创建目录的层次结构。例如wget -x http://fly.srk.fer.hr/robots.txt会将下载的文件保存到fly.srk.fer.hr/robots.txt。


感谢您的推荐。我应该习惯于帮助自己。
NGambit

克里斯:但是,如果我有fly.srk.fer.hr/dir1/robots.txt,则wget -x会创建fly.srk.fer.hr目录,并将名为dir1 / robots.txt的文件放入其中。我需要它甚至创建子目录。即将robots.txt保存到fly.srk.fer.hr/dir1/
NGambit 2013年

@NGambit无法创建dir1/robots.txt在Unix上命名的单个文件。
克里斯·

你是对的。我正在使用的配置文件在目录路径中具有“ \”而不是“ /”(因为它是从另一个基于Windows的文件中解析的),这使事情变得混乱。只需将'\'替换为'/',然后将“ wget -x -i文件名”像一个
咒语就

2
旁注:有时您想跳过URL中的前N个文件夹,然后添加:--cut-dirs=N
tokland

16

为了获得您要的结构,我建议同时使用-nH和-x。

这将删除主机名并创建所需的目录结构。

例如

wget -x -nH http://xyz.abc.com/Dir1/Dir3/sds.exe

- 'Dir1/Dir3/sds.exe' saved [1234]

从手册页:

-nH
--no-host-directories
   Disable generation of host-prefixed directories.  By default, invoking Wget with -r http://fly.srk.fer.hr/ will create a structure of directories beginning with fly.srk.fer.hr/.  This option disables such behavior.

-x
--force-directories
   ...create a hierarchy of directories, even if one would not have been created otherwise...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.