2013-09-22 103 views
5

我试图用wget下载不同本地文件下的文件只能在服务器上的文件较新时下载。wget ::重命名下载的文件,只下载更新的文件

我想我唯一能做的就是用的wget-O选项,以便能够选择下载的文件的名称,如:

wget http://example.com/weird-name -O local-name 

结合起来,与该-N选项除非服务器上的时间戳较新,否则不会下载任何内容。在下面的评论中解释的原因,wget拒绝两个标志结合:在简洁的变通

WARNING: timestamping does nothing in combination with -O. See the manual 
for details. 

任何想法?

+1

你的目标是什么? man wget解释了为什么将-N与-O混合在一起毫无意义,因为:-O的意思并不是简单地“使用名称文件而不是URL中的名称”;相反,它类似于shell重定向。总之,你的输出文件将永远比在服务器中更新,并且永远不会下载任何东西。 –

+1

我想实际的问题是“在wget/bash中重命名下载文件的习惯用法**和**只在服务器上更新时才下载它们” - 我已将这个问题改写为明确。 –

+0

@ecelis如果我找到你并且'man wget'说得对,那意味着'-O'文件在你运行'wget'的时刻总是被重写/截断,所以它的时间戳总是NOW,在这种情况下下载从未触发。对? –

回答

2

下载它,然后创建一个链接

wget -N example.com/weird-name 
ln weird-name local-name 

之后,你可以运行wget -N,它会按预期工作:

  • 只下载,如果新
  • 如果一个新文件被下载它将可以从任何名称访问,不需要花费额外的驱动器空间
+0

这可以工作,除非您使用'-O'的原因是因为您正在从多个源下载相同的文件到相同的目录中。例如,如果您正在下载多个robots.txt文件。 –

1

如果使用其他工具,可以在你的情况,我建议使用免费的,开源的lwp-mirror

lwp-mirror [-options] <url> <file> 

它的工作原理就像你愿意,没有变通方法。

此命令由Ubuntu和Debian等地的libwww-perl软件包提供。

请注意lwp-mirror不支持所有的wget的其他功能。例如,它不允许您为wget这样的请求设置用户代理。