Perl (Windows 上) で、ディレクトリの最終変更時刻を確認するにはどうすればよいですか?
ノート:
opendir my($dirHandle), "$path";
my $modtime = (stat($dirHandle))[9];
次のエラーが発生します。
scriptName.pl 行 lineNumber で dirfd 関数が実装されていません。
どうやら本当の答えは、ディレクトリへのパスで stat を呼び出すだけです (多くの例が信じているように、ディレクトリハンドルではありません) (少なくとも Windows の場合)。
例:
my $directory = "C:\\windows";
my @stats = stat $directory;
my $modifiedTime = $stats[9];
ローカルタイムに変換したい場合は、次のようにします。
my $modifiedTime = localtime $stats[9];
すべてを1行で実行したい場合は、次のことができます。
my $modifiedTime = localtime((stat("C:\\Windows"))[9]);
ちなみに、Win32 UTCFileTime perl モジュールには構文エラーがあり、perl モジュールが適切に解釈/コンパイルされません。つまり、perl スクリプトに含まれている場合、そのスクリプトも正しく動作しません。何かを実行するすべての実際のコードをスクリプトにマージして再試行すると、Perl は最終的にメモリ不足になり、実行が停止します。いずれにせよ、上記の答えがあります。
my $dir_path = "path_of_your_directory";
my $mod_time = ( stat ( $dir_path ) )[9];
CPAN でWin32::UTCFileTimeモジュールを使用します。これは、組み込みの stat 関数のインターフェイスを反映しています。
use Win32::UTCFileTime qw(:DEFAULT $ErrStr);
@stats = stat $file or die "stat() failed: $ErrStr\n";