2016-10-12 3 views
1

우리는 wget을 사용하여 미국 전역의 다른 공급 업체에서 데이터 파일을 다운로드합니다. 예를 들어 우리 서버는 EST 시간대에 있고, vendeor1의 시간대는 CST이고, vendor2의 시간대는 PST입니다.wget 파일 타임 스탬프 (현지 시간대)

wget의 기본 동작은 파일의 lastmodified 타임 스탬프가 원본의 원래 표준 시간대에 남아 있다는 것입니다. 로컬 서버 (EST) 시간대에서 마지막으로 수정 한 타임 스탬프는 어떻게 얻습니까?

예를 들어, file1은 캘리포니아에있는 vendor2의 서버 (PST/PDT)에서 다운로드됩니다. 마지막 수정 된 시간은 심지어 시간을 만들기 전에도 의미가 없습니다. 29 일 동부 서머 타임 01시 57분 0초 2016

우리가 "잘못"LASTMODIFIED 시간을 볼 수있는 이유는 금 9월입니다 실제 LASTMODIFIED 시간은 목 9월 인 29 22시 57분 0초 PDT 2016, 때문에 wget과의 킵입니다 소스의 타임 존에있는 시간. wget을 사용하여 EST, PST 및 주문 파일을 제외한 다른 서버에서 데이터를 다운로드 한 경우 수신자는 lastmodified를 기반으로 파일을 수정합니다. wget을 사용할 때 대상 서버의 시간대를 사용하는 쉬운 방법이 있습니까?

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 파일과 시간대가없는 유닉스 스타일의 타임 스탬프 동료로 저장 Shouldnot (적어도 모든 파일 'LASTMODIFIED 타임 스탬프는 시대 이후 같은 tiemzone, 또는 unixtime에있을 것입니다)? 시간대가 없다면 서버가 어디에 있는지, 파일이 어디로 전송되는지 (파일의 타임 스탬프로 생성되는지)는 문제가되지 않습니다. 그렇다면 왜 wget이 그것을 수정합니까?

+0

서버의 시간대를 GMT로 설정하는 것은 어떻습니까? ** wget -d **를 사용하면 HTTP 헤더에 ** GMT ** 시간대가 표시됩니다. – user2182349

+0

시간대를 올바른 설정으로 두는 것이 더 좋습니다. 시간대를 조정하면 실행중인 다른 응용 프로그램에 예기치 않은 결과가 발생할 수 있습니다. – fivelements

답변

1

이 bash는 스크립트는 같은 이름으로 써, 파일을 얻을 수 wget을를 사용 으로 요청하는 마지막으로 수정 또는 날짜 헤더를 사용하여 타임 스탬프를 조정합니다. 그리니치 표준시 02시 47분 13초

2007 12월 27일 (목) : 타임 스탬프를 원본 서버에서

파일의 날짜를 조정 파일

얻기

#!/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; 

샘플 출력

-rw-rw-r--. 시간대 조정 한 사용자 사용자 481 12월 26일 2007 robots.txt에

날짜 : 수요일 12월 26일 동부 표준시 21시 47분 13초 2007

-rw--RW r-- 사용. 사용자 1 명 481 2007 년 12 월 26 일 robots.txt

이것은 두 가지 (또는 세 가지) 요청을하고 있습니다. 하나의 요청 만하도록 스크립트를 향상시킬 수 있습니다.

관련 문제