如何根据服务器上次修改日期输入和写入文件名?

时间:2014-12-08 14:29:28

标签: bash shell command-line wget

我想在Bash中通过wget下载网站,但只能在设定日期之后修改网页​​。例如,如果我想下载Stack Overflow,但仅限于12/1/2014之后修改的页面。我还想将修改日期的时间戳从服务器写入本地文件名。

使用wget,这是我到目前为止所提出的:

wget -m -r -l 9 -t 3 -T 15 -O snapshot-`date +%Y-%m-%d-%H%M%S`.htm -R js,css,jpg,png,gif,pdf,mpg,mp3,mpeg,au,wav,docx,JS,CSS,JPG,PNG,GIF,PDF,MPG,MP3,MPEG,AU,WAV,DOCX,asx,asf,ASX,ASF,WMV,wmv,wma,WMA -erobots=off http://www.example.com

然而,这会使我获得文件下载的日期,而不是服务器修改日期。

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

使用wget选项调用-O会导致所有下载的文件连接成一个输出文件,而不会指示每个文件的起始位置。由于snapshot存档中会有多个下载文件,并且可能会有不同的修改日期,因此似乎无法满足请求。

另请注意,-m隐含-N,与-O不兼容(如wget manual中所述)。

如果您想保留所有文件的修改日期,建议您使用-N选项单独下载(并且不使用-O选项,让wget应用文件本身的名称)。然后,您可以使用新文件名中的每个文件的修改日期在后处理步骤中重命名文件。 (提示:stat -c %ystat -c %z)。但您需要注意并非所有网站都提供准确的日期。

如果要保留HTTP响应中的更多信息,可以指定--save-headers选项,该选项会将标头添加到每个保存的文件中。然后,您可以对文件进行后处理以提取和删除标题(文件本身会在第一个空白行后立即启动)。

最后,-erobots=off的使用通常被认为是不友好的(甚至违反了可接受的使用策略),因为它可能导致过多的服务器负载。除非获得站点管理员的许可,否则不应对不受您控制的站点的递归请求指定此选项。