Perl でファイルのタイムスタンプを変更する

小ネタ。「【Unix】タイムスタンプを変更する」を調べたときに使った Perl スクリプト。

#!/usr/bin/perl use strict;
use warnings;
use Date::Manip;
my @s = stat "IMG_0036.MOV";
my $atime = $s[8];
my $mtime = UnixDate "2010-08-14T14:29:17", "%s";
utime $atime, $mtime, "IMG_0036.MOV";

Perl でファイルのタイムスタンプを変えるには utime 関数を使う。例では atime は元のファイルのものをそのまま使い、mtime だけを指定の日時に変更している。どちらのパラメータもエポック時で指定する必要があるが、その際 Date::Manip モジュールの UnixDate 関数を使うと便利だ。

【Perl】Date::Manip モジュールで日付文字列を解析する(関数型インターフェイス編)
https://blog.delphinus.dev/2010/07/date-manip-in-functional-interface.html

【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

Continue reading