ファイルの修正日時

Unix系のファイルシステムではctime, mtime, atimeと呼ばれる3種類の時刻がファイルに関連付けられている.それぞれファイルの作成 (create) 日時,最終修正 (modify) 日時,最終アクセス (access) 日時だ.mtimeとatimeの違いは「ファイルに『上書き』をしたときは両者とも更新されるが,ファイルを読み込んだだけのときは後者のみが更新される」点だ*1.普通ls -lで表示される時刻はmtimeだ(無難な選択と言える). ctimeは変更できないが,mtimeとatimeは utime(2) というsyscallで変更できる.これは time_t を引数に取る使い辛いsyscallだが*2Perl, RubyPythonが同名のラッパ手続きを提供しているのでそちらを使えばよい.
id:flappphys:20050110#p01 で言及したMailmanのbin/archでメールアーカイヴのHTML化をやり直したら,それらに対しNamazuの「新しい順」検索が効かなくなっていた.何しろHTMLファイルが全部同時刻になっていたから.そこでHTMLファイルのmtimeをその中に書かれているメールの送信時刻へと修正するツールをRubyで書いた.簡単だった.

*1:atimeはあまり使いどころがないが,ディスクのマウント時に更新を無効にできる.mount(8) のmanを参照.

*2:事実上Unix時間を基準としていると言える.Epochからの経過秒なんて一々操作してられませんな.