ファイルの最終アクセス日時と最終更新日時をセットする
utime
は、LIST に指定したそれぞれのファイルの最終アクセス日時と最終更新日時を変更します。
第一引数には最終アクセス日時を、第二引数には最終更新日時をエポック秒で指定し、それ以降は、ファイルを指定します。
成功したら、日時が変更されたファイルの数を返します。
それぞれのファイルの inode 変更日時は現在日時がセットされます。
次のコードは、既存のファイルの最終アクセス日時と最終更新日時を今にセットします。
これは、UNIX の touch(1)
コマンドが既存ファイルに対して行うことと同じです。
my $atime = my $mtime = time;
utime $atime, $mtime, './sample.txt';
Perl 5.8.0 以降、ほとんどのシステムでは、第一引数と第二引数に undef
を指定すると、
該当のファイルの最終アクセス日時と最終更新日時を今にセットします。
つまり、前述のコードと同じ効果が得られます。
加えて、書き込み権限がないファイルですら成功します。
utime undef, undef, './sample.txt';
第一引数と第二引数のどちらか一方だけに undef
を指定すると、
「Use of uninitialized value in utime」警告が出力され、期待通りの結果となりませんので注意してください。
undef
を指定するなら、第一引数と第二引数の両方に指定してください。
UNIX 系 OS なら (futimes(2) をサポートしている OS なら)、
utime
にファイルハンドルを引き渡すこともできます。
my $atime = my $mtime = time;
open my $fh, '<', './sample.txt';
utime $atime, $mtime, $fh;
Windows ではファイルハンドルの引き渡しはサポートされていませんので注意してください。