2016-10-12 17 views
1

wgetを使用して、米国各地のさまざまなベンダーからデータファイルをダウンロードします。たとえば、当社のサーバーはESTタイムゾーンにあり、vendeor1のタイムゾーンはCSTで、ベンダー2のタイ​​ムゾーンはPSTです。wgetファイルタイムスタンプ(ローカルタイムゾーン)

wgetのデフォルトの動作は、ファイルのlastmodifiedタイムスタンプがソースからの元のタイムゾーンにあることです。ローカルサーバー(EST)のタイムゾーンで最後に変更されたタイムスタンプを取得するにはどうすればよいですか?

ここでは、file1がカリフォルニア州(PST/PDT)にあるベンダー2のサーバーからダウンロードされた例を示します。最後の改造された時間は、作成する前でさえも意味をなさない。実際LASTMODIFIED時間は、私たちが「間違っている」LASTMODIFIED時間を参照してください理由が原因のwgetキープのある木9月29日午後10時57分00秒金9月29日午前1時57分00秒EDTあるPDT 2016、2016

ですソースのタイムゾーン内の時刻。 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はそれを変更しますか?

+0

サーバーのタイムゾーンをGMTに設定するにはどうすればよいですか? ** wget -d **を使用すると、HTTPヘッダーに** GMT **タイムゾーンが表示されます。 – user2182349

+0

タイムゾーンを正しい設定にすることをお勧めします。タイムゾーンを調整すると、それを実行している他のアプリケーションに予期しない結果が発生します。 – fivelements

答えて

1

このbashスクリプトは、その後、同じ名前でそれを書き出し、ファイルを取得するために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年12月2時47分13秒GMT

-rw-rw-r--。タイムゾーンを調整した場合は、1つのユーザーのユーザー481 2007年12月26日のrobots.txt

日:水曜日12月26日21時47分13秒EST 2007

-rw-r--の-RW。 1ユーザーユーザー481 2007年12月26日robots.txt

これは2つ(または3つ)のリクエストを作成しています。 1つのリクエストのみを行うようにスクリプトを拡張することができます。

関連する問題