[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
インターネットからの情報のミラーの側面で最も重要なことの一つは,アーカ イブの更新です.
アーカイブを何度も何度もダウンロードすると,わずかに変更されたファイル の置換だけでは勿体なく,それは,帯域幅とお金の無駄使いの両方を意味し, 更新する時間も無駄になります.これは,全てのミラーツールが逐次的な更新 のオプションを提案する理由です.
そのような更新メカニズムは,リモートサーバが新しい(new)ファイル の検索でスキャンされることを意味します.これらの新しいファイルのみ古い ものに置換されます.
以下の二つの条件のどちらか一つが当てはまる場合,ファイルは新しいものと 考えられます.
これを実装するため,プログラムは,ローカルとリモートの両方のファイルが 最後に更新された時間に気付いている必要があります.そのような情報を,我々 はファイルのタイムスタンプ(time-stamp)と呼びます.
The time-stamping in GNU Wget is turned on using `--timestamping' (`-N') option, or through timestamping = on
directive in `.wgetrc'. With this option, for each file it intends to download, Wget will check whether a local file of the same name exists. If it does, and the remote file is older, Wget will not download it.
GNU Wgetのタイムスタンプは,`--timestamping' (`-N')オプショ ンや,`.wgetrc'でのtimestamping = on
の命令を通じて開始され ます.このオプションでそれぞれのファイルをダウンロードするため,Wgetは 存在する同じ名前のローカルファイルを調査します.それが存在しリモートファ イルが古い場合,Wgetはそれをダウンロードしません.
ローカルファイルが存在しない場合やファイルサイズが一致しない場合,Wget はタイムスタンプを気にせずに,リモートファイルをダウンロードします.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
タイムスタンプの利用は単純です.編集日時を保つため,ダウンロードしたい ファイルに対し以下のようにします.
wget -S http://www.gnu.ai.mit.edu/ |
単純にls -l
すると,ローカルファイルのタイムスタンプが,サーバか ら返されるようなLast-Modified
のステータスと同じになります.タイ ムスタンプ情報は,見て分かるように,たとえ`-N'がない場合でも(少く ともHTTPに対し)ローカルに維持されます.
数日後,Wgetにリモートファイルが変化したかどうか調査させ,変化した場合 ダウンロードしたい場合もあります.
wget -N http://www.gnu.ai.mit.edu/ |
Wgetはサーバに最後に編集した日付を尋ねます.ローカルファイルがサーバと 同じタイムスタンプ,またはより新しい場合,リモートファイルは再取得され ません.しかし,リモートファイルがより最新の場合,Wgetは取得処理を行い ます.
The same goes for FTP. For example:
FTPでも同じようになります.例えば以下のようにします.
wget "ftp://ftp.ifi.uio.no/pub/emacs/gnus/*" |
(URLの周りの引用符で,シェルが`*'を展開することを妨げます.)
ダウンロード後にローカルディレクトリをリスト表示すると,リモートサーバ のものと一致するタイムスタンプを表示します.`-N'でコマンドを再発 行することで,Wgetは,前回ダウンロードしてから編集されたファイル のみ再び回収します.
毎週,GNUアーカイブをミラーしたい場合,毎週以下のコマンドを入力するで しょう.
wget --timestamping -r ftp://ftp.gnu.org/pub/gnu/ |
タイムスタンプは,サーバがタイムスタンプを与えるファイルに対してのみ動 作します.HTTPに対しては,これはLast-Modified
ヘッダに依存 します.FTPに対しては,これはWgetがパース可能な書式の,日付を用い たディレクトリリストで得られるものに依存します(see 節 5.3 FTPタイムスタンプの内部).
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
HTTPのタイムスタンプは,Last-Modified
ヘッダの調査により実 行されます.HTTPでファイル`foo.html'を回収したい場合,Wgetは `foo.html'がローカルに存在しているかどうかを調べます.存在しない 場合,`foo.html'は無条件に回収されます.
ローカルにファイルがある場合,Wgetは最初にローカルのタイムスタンプを調 べ(ls -l
でそれを調べることに似ています),そして,リモートファイ ルの情報を要求するため,HEAD
要求をリモートサーバに送ります.
Last-Modified
ヘッダは,ファイルがより最近編集され("新しく"され) たことを知るために調査されます.リモートファイルがより新しい場合,ダウン ロードされます.古い場合,Wgetは諦めます.(2)
`-N'とともに`--backup-converted' (`-K')が指定されている とき,サーバファイル`X'は,それが現存している場合はローカル ファイルの`X.orig'と比較され,ローカルファイル `X'と比較されません---`--convert-links' (`-k')で 変換されている場合は常に異なっています.
おそらく,HTTPタイムスタンプはIf-Modified-Since
要求を使用 して実装されるべきです.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
理論上,FTPタイムスタンプはHTTPと同じように動作しますが, FTPにはヘッダがありません---タイムスタンプはディレクトリリストか ら探し出す必要があります.
FTPダウンロードが,再帰的またはglobを使用している場合,ディレクト リが含んでいる要求されたファイルに対してファイルリストを取得するために, WgetはFTP LIST
コマンドを使用します.それはリストの解析を試 み,それをUnixのls -l
の出力のように扱い,タイムスタンプを抽出し ます.残りはHTTPに対するものと全く同じです.FTPサーバから globや再帰を使用しないで個別のファイルを回収する時,`-N'を指定し ない限りリストアップされたファイルはダウンロードされません(そして,こ のためファイルにタイムスタンプは付きません).
全てのディレクトリリストがUnix形式のリストだという仮定は,非常に不自然 に感じるかもしれませんが,経験的にはそうではなく,その理由は,ほとんど (全て?)のクライアントがそれを理解できるので,多くの非Unix FTPサー バでもUnixのようなリスト書式を使用しているためです.RFC959定義が, タイムスタンプは言うまでもなく,ファイルリストを取得する標準的な方法で はないことを覚えておいてください.我々は,将来の標準がこのように定義さ れることを期待することしかできません.
もう一つの非標準の解決方法は,(評判のよいwu-ftpd
を含め)いくつか のFTPサーバがサポートするMDTM
コマンドの使用も含まれていて, それは指定したファイルの正確な時間を返します.Wgetは,将来このコマンド をサポートするかもしれません.
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |