gpt4 book ai didi

perl - 如何以 diff 命令返回的格式获取 perl 中文件的最后修改时间?

转载 作者:行者123 更新时间:2023-12-05 00:45:44 25 4
gpt4 key购买 nike

我想以与 linux diff 显示的格式相同的格式显示时间命令。

D:\>diff -dub old.cfg new.cfg
--- old.cfg 2019-05-15 15:03:14.289950700 +0530
+++ new.cfg 2019-05-14 16:07:21.119695300 +0530

我想将文件的最后修改时间显示为 2019-05-15 15:03:14.289950700 +0530 .
我用了 stat但我没有得到纳秒部分。 Alo,需要给定格式的时区。我试过 Time::HiRes也有,但是拿不到。
my $dt = strftime("%Y-%m-%d %H:%M:%S", localtime((stat($old_file))[9]));

它返回: 2019-05-15 15:03:14 .你能帮我附加其他信息吗?

最佳答案

我必须首先说,这不会是准确的。即使您的硬件在返回到软件时可能支持纳秒级分辨率,但它也有数百倍的延迟。 (对于一个文件的时间戳,可能仅用于相对于其他文件,这可能不太重要。)

话虽如此,我发现声称纳秒的唯一方法是使用系统的工具,所以stat

my ($ts) = grep { /^\s*Access: [0-9]{4}/ } qx(stat $file);
$ts =~ s/^\s*Access:\s+//;

或者,使用 map也可以作为过滤器
my ($ts) = map { /^\s*Access:\s+([0-9]{4}.*)/ ? $1 : () } qx(stat $file);

当然,这里的一个问题是我们必须解析输出。所以请查看您的手册页并测试您的 stat ,并且不希望有太多的可移植性。注意系统变化,因为程序的输出格式可能会发生变化。但我没有在 Perl 中找到纳秒声明。

作为引用,在我的 CentOS 7 上(在 bashtcsh 下)
perl -we'$f=shift; print grep { /^\s*Access: [0-9]{4}/ } qx(stat $f)' file

打印,用于随机文件
Access: 2019-05-15 13:21:57.723987422 -0700

Once again, the "nano"seconds aren't accurate at all.


Another option, for perhaps more reliable output parsing, is to use ls with its --full-time

my $ts = join ' ', (split ' ', qx(ls --full-time $file))[5..7];

与往常一样,在运行外部命令时,请谨慎构建变量,并适本地引用和转义。一个好工具是 String::ShellQuote .或者,除非特别需要,否则最好完全避免使用 shell。最好使用运行外部工具的模块来完成所有这些工作。

关于perl - 如何以 diff 命令返回的格式获取 perl 中文件的最后修改时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56162311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com