ものすごく基本的なことなのだけれど、実際必要になるまで覚えてなかった。
タイムスタンプを調べる
今日 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 の定義が複雑でわかりにくいが今回はこれに触らない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 に設定する。これで目的は達した。