【问题标题】:How to wget and write filename based on server last modified date?如何根据服务器上次修改日期获取和写入文件名?
【发布时间】:2014-12-08 14:29:27
【问题描述】:

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

使用 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

不过,这会告诉我文件的下载日期,而不是服务器修改日期。

谁能帮我解决这个问题?

【问题讨论】:

    标签: bash shell command-line wget


    【解决方案1】:

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

    另外,请注意-m 暗示-N,它与-O 不兼容(如wget manual 中所述)。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多