Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何根据服务器上次修改日期设置和写入文件名?_Bash_Shell_Command Line_Wget - Fatal编程技术网

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

Bash 如何根据服务器上次修改日期设置和写入文件名?,bash,shell,command-line,wget,Bash,Shell,Command Line,Wget,我想在Bash中通过wget下载一个网站,但只在设定日期后修改页面。例如,如果我想下载堆栈溢出,但仅在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,PD

我想在Bash中通过wget下载一个网站,但只在设定日期后修改页面。例如,如果我想下载堆栈溢出,但仅在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
但是,这会获取文件下载的日期,而不是服务器修改的日期


有人能帮我解决这个问题吗?

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

另外,请注意,
-m
表示
-N
,这与
-O
不兼容(如中所述)

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

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

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