【Unix】タイムスタンプを変更する


ものすごく基本的なことなのだけれど、実際必要になるまで覚えてなかった。

タイムスタンプを調べる

今日 iPhone で撮った動画のタイムスタンプが訳の分からない日付になっていて困った。ほかの写真と全く違うのだ。

$ ls -l IMG_0036.MOV
-rw-------  1 delphinus  staff  46099763  1 19  1928 IMG_0036.MOV

と言う訳で、改めてお勉強。ここに現れる時刻はいったい何なのか。

UNIX の部屋 コマンド検索:タイムスタンプ (*BSD/Linux)
http://x68000.q-e-d.net/~68user/unix/pickup?%A5%BF%A5%A4%A5%E0%A5%B9%A5%BF%A5%F3%A5%D7

UNIX におけるファイルの時刻管理には 3 種類のタイムスタンプが使われる。

mtime
最終変更時刻(modify time)の意。ファイルに書き込んだ(write(2)、または、truncate(2) した)時刻を表す。平たく言えば、ファイルに書き込んだ時刻だ。これは ls -l コマンドで確認できる。

$ ls -l IMG_0036.MOV
-rw-------  1 delphinus  staff  46099763  1 19  1928 IMG_0036.MOV
atime
最終アクセス時刻(access time)の意。ファイルに read(2) した、つまり、読み込もうとした時刻を表す。これは ls -lu コマンドで確認できる。

$ ls -lu IMG_0036.MOV
-rw-------  1 delphinus  staff  46099763  8 14 21:33 IMG_0036.MOV
ctime
最終ステータス変更時刻(change time)の意。これはちょっと複雑で、ファイルに write(2)、または、truncate(2)、または、inode データの修正を行った場合に変更される。詳しくは上のリンク先を参照して欲しいが、今回の場合は、iPhone からコピーして Mac にファイルを生成した時刻がこれに当たる。これは ls -lc コマンドで確認できる。

$ ls -lc IMG_0036.MOV
-rw-------  1 delphinus  staff  46099763  8 14 21:29 IMG_0036.MOV

ctime の定義が複雑でわかりにくいが今回はこれに触らない(そもそも、通常の手段では変更不可能なのだ。)。atime と mtime の修正には touch(1) コマンドを使う。

タイムスタンプを変更する

UNIX の部屋 コマンド検索:touch (*BSD/Linux)
http://x68000.q-e-d.net/~68user/unix/pickup?touch

今回は mtime だけを変えれば十分だ。

$ touch -m -t 201008141429.17 IMG_0036.MOV
$ ls -l IMG_0036.MOV
-rw-------  1 delphinus  staff  46099763  8 14 14:29 IMG_0036.MOV

ほかの写真から推量して、今日の 14:29:17 に設定する。これで目的は達した。

コメントを残す