本地时区的 wget 文件时间戳
wget file timestamp in local timezone
我们使用 wget 从美国各地的不同供应商下载数据文件。例如,我们的服务器是EST时区,vendeor1的时区是CST,vendor2的时区是PST。
wget 的默认行为是文件的 lastmodified 时间戳仍然在源的原始时区中。我们如何获得本地服务器 (EST) 时区的最后修改时间戳?
举个例子,file1 是从位于加利福尼亚 (PST/PDT) 的供应商 2 的服务器下载的。上次修改时间甚至早于创建时间是没有意义的。实际最后修改时间是 Thu Sep 29 22:57:00 PDT 2016,即 Fri Sep 29 1:57:00 EDT 2016.
我们看到 "wrong" 上次修改时间的原因是因为 wget 将时间保持在源的时区中。如果我们根据收到的 lastmodified 使用 wget 从 EST、PST 和订单文件以外的服务器下载数据,那么它是不正确的。使用 wget 时是否有一种简单的方法来使用目标服务器的时区? (至少所有文件的 lastmodified 时间戳将在同一个 tiemzone 中,或者自纪元以来的 unixtime)
file1 = '..../yyyymmdd.zip'
>>> os.path.getmtime(file1)
1475204220.0
>>> os.path.getctime(file1)
1475253907.1713214
$ date -d @1475204220
Thu Sep 29 22:57:00 EDT 2016
$ date -d @1475253907.1713214
Fri Sep 30 12:45:07 EDT 2016
不应该将 lastmodified 保存为与文件关联的无时区 unix 样式时间戳吗?如果它是无时区的,那么服务器位于哪里,或者文件传输到哪里都没有关系(作为文件的创建时间戳。)那么wget为什么要修改它?
这个bash脚本使用wget获取文件,用相同的名字写出来,然后使用[调整时间戳=28=] 或 Date headers 用 curl.
请求
#!/bin/bash
get_file() {
echo 'Getting the file';
`wget -q "" -O ""`;
return $?
}
adjust_timestamp(){
echo 'Adjusting the timestamp';
FILEDATE=`curl -sI "" | grep Last-Modified`;
if [ -z "$FILEDATE" ];
then
FILEDATE=`curl -sI "" | grep Date`;
fi;
FILEDATE=`echo "$FILEDATE" | sed "s/^[^:]\+: //"`;
NEWDATE=`date --date="$FILEDATE"`;
echo "File date from source server: $FILEDATE";
ls -l ;
echo "Date adjusted for timezone: $NEWDATE";
touch -d "$NEWDATE";
ls -l ;
}
HOST='http://www.example.com';
FILE='robots.txt';
URL="$HOST/$FILE"
if get_file "$URL" "$FILE";
then
adjust_timestamp "$URL" "$FILE";
fi;
示例输出
Getting the file
Adjusting the timestamp
File date from source server: Thu, 27 Dec 2007 02:47:13 GMT
-rw-rw-r--. 1 user user 481 Dec 26 2007 robots.txt
Date adjusted for timezone: Wed Dec 26 21:47:13 EST 2007
-rw-rw-r--. 1 user user 481 Dec 26 2007 robots.txt
这是提出两个(或三个)请求。您可能希望增强脚本以仅发出一个请求。
我们使用 wget 从美国各地的不同供应商下载数据文件。例如,我们的服务器是EST时区,vendeor1的时区是CST,vendor2的时区是PST。
wget 的默认行为是文件的 lastmodified 时间戳仍然在源的原始时区中。我们如何获得本地服务器 (EST) 时区的最后修改时间戳?
举个例子,file1 是从位于加利福尼亚 (PST/PDT) 的供应商 2 的服务器下载的。上次修改时间甚至早于创建时间是没有意义的。实际最后修改时间是 Thu Sep 29 22:57:00 PDT 2016,即 Fri Sep 29 1:57:00 EDT 2016.
我们看到 "wrong" 上次修改时间的原因是因为 wget 将时间保持在源的时区中。如果我们根据收到的 lastmodified 使用 wget 从 EST、PST 和订单文件以外的服务器下载数据,那么它是不正确的。使用 wget 时是否有一种简单的方法来使用目标服务器的时区? (至少所有文件的 lastmodified 时间戳将在同一个 tiemzone 中,或者自纪元以来的 unixtime)
file1 = '..../yyyymmdd.zip'
>>> os.path.getmtime(file1)
1475204220.0
>>> os.path.getctime(file1)
1475253907.1713214
$ date -d @1475204220
Thu Sep 29 22:57:00 EDT 2016
$ date -d @1475253907.1713214
Fri Sep 30 12:45:07 EDT 2016
不应该将 lastmodified 保存为与文件关联的无时区 unix 样式时间戳吗?如果它是无时区的,那么服务器位于哪里,或者文件传输到哪里都没有关系(作为文件的创建时间戳。)那么wget为什么要修改它?
这个bash脚本使用wget获取文件,用相同的名字写出来,然后使用[调整时间戳=28=] 或 Date headers 用 curl.
请求#!/bin/bash
get_file() {
echo 'Getting the file';
`wget -q "" -O ""`;
return $?
}
adjust_timestamp(){
echo 'Adjusting the timestamp';
FILEDATE=`curl -sI "" | grep Last-Modified`;
if [ -z "$FILEDATE" ];
then
FILEDATE=`curl -sI "" | grep Date`;
fi;
FILEDATE=`echo "$FILEDATE" | sed "s/^[^:]\+: //"`;
NEWDATE=`date --date="$FILEDATE"`;
echo "File date from source server: $FILEDATE";
ls -l ;
echo "Date adjusted for timezone: $NEWDATE";
touch -d "$NEWDATE";
ls -l ;
}
HOST='http://www.example.com';
FILE='robots.txt';
URL="$HOST/$FILE"
if get_file "$URL" "$FILE";
then
adjust_timestamp "$URL" "$FILE";
fi;
示例输出
Getting the file
Adjusting the timestamp
File date from source server: Thu, 27 Dec 2007 02:47:13 GMT
-rw-rw-r--. 1 user user 481 Dec 26 2007 robots.txt
Date adjusted for timezone: Wed Dec 26 21:47:13 EST 2007
-rw-rw-r--. 1 user user 481 Dec 26 2007 robots.txt
这是提出两个(或三个)请求。您可能希望增强脚本以仅发出一个请求。