2016-10-12 2 views
1

Мы используем wget для загрузки файлов данных от разных поставщиков по США. Например, наш сервер находится в часовом поясе EST, часовой пояс vendeor1 - это CST, а часовой пояс поставщика - PST.wget file timestamp в локальном часовом поясе

Поведение wget по умолчанию заключается в том, что временная метка последнего времени файла будет по-прежнему находиться в исходном часовом поясе от источника. Как получить временную метку lastmodified в часовом поясе локального сервера (EST)?

Вот один пример: file1 загружается с сервера vendor2, расположенного в Калифорнии (PST/PDT). Не имеет смысла, что последнее модифицированное время еще до создания времени. Фактическое LastModified время Чт 29 сентября 22:57:00 PDT 2016, что Пт 29 сентября 1:57:00 EDT 2016.

Причина мы видим «неправильный» LastModified время из-за WGET донжон время в часовом поясе источника. Если мы используем wget для загрузки данных с серверов, отличных от EST, PST и файлов заказов, основанных на lastmodified, которые мы получаем, тогда это будет неверно. Есть ли простой способ использовать часовой пояс целевых серверов при использовании 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 

Shouldnot LastModified быть сохранены в часовом поясе менее Unix-стиле временных меток ассоциируется с файлом? Если он не зависит от часового пояса, то не имеет значения, где находится сервер, или куда передается файл или из него (в качестве метки времени создания файла.) Тогда почему wget модифицирует его?

+0

Как настроить часовой пояс вашего сервера на GMT? Использование ** wget -d ** показывает, что заголовки HTTP имеют часовой пояс ** GMT **. – user2182349

+0

Я предпочитаю оставить часовой пояс правильной настройке. Настройка часового пояса будет иметь неожиданные последствия для других приложений, работающих на нем. – fivelements

ответ

1

Этого Баш скрипт использует Wget, чтобы получить файл, записывает его с таким же именем, а затем корректирует метку времени с помощью Last-Modified или Даты заголовков, которые запрашиваются с завитком.

#!/bin/bash 

get_file() { 
     echo 'Getting the file'; 
     `wget -q "$1" -O "$2"`; 
     return $? 
} 

adjust_timestamp(){ 
     echo 'Adjusting the timestamp'; 
     FILEDATE=`curl -sI "$1" | grep Last-Modified`; 
     if [ -z "$FILEDATE" ]; 
     then 
       FILEDATE=`curl -sI "$1" | grep Date`; 
     fi; 
     FILEDATE=`echo "$FILEDATE" | sed "s/^[^:]\+: //"`; 
     NEWDATE=`date --date="$FILEDATE"`; 
     echo "File date from source server: $FILEDATE"; 
     ls -l $2; 
     echo "Date adjusted for timezone: $NEWDATE"; 
     touch $2 -d "$NEWDATE"; 
     ls -l $2; 
} 

HOST='http://www.example.com'; 
FILE='robots.txt'; 
URL="$HOST/$FILE" 

if get_file "$URL" "$FILE"; 
then 
     adjust_timestamp "$URL" "$FILE"; 
fi; 

Пример вывода

Получение файла

Регулировка Отметка времени

дата файла с сервера источника: Чт, 27 декабря 2007 2:47:13 GMT

-rw-rw-r--. 1 пользователя 481 26 декабря 2007 robots.txt

Дата поправкой на часовой пояс: Wed 26 декабря 21:47:13 EST 2007

-rw-RW-r--. 1 пользователь 481 26 декабря 2007 г. robots.txt

Это делает два (или три) запроса. Вы можете улучшить сценарий только для того, чтобы сделать один запрос.

Смежные вопросы