如何在POSIX sh中获取一个文件的最后修改时间?

编程语言 2026-07-12

我想获取一个文件的最后修改时间,最好以UNIX纳秒为单位,便于比较。我在网上看到两种解决方案(假设 $1 就是文件名):

stat -c %Y "$1"

date %s%N -r "$1" | sed s/^0+//

然而,这些都是GNU扩展,且前者只输出秒数。如何在POSIX下获取修改时间?

解决方案

要测试 file1 是否比 file2 更新:

find file1 -newer file2 -prune | grep -q .

要测试 file1 是否比某个时间戳更新:

touch -d YYYY-MM-DDThh:mm:SS[.frac][tz] file2    # or [,frac]
find file1 -newer file2 -prune | grep -q .

请注意 file1file2 可能具有相同的时间戳,因此如果你需要知晓三种情况(t1>t2、t1==t2、t1<t2),就需要额外的代码。


如果你需要查看 file1 的修改时间,一种低效的方法是使用上面第二组命令进行二分查找,在不同时间戳之间迭代。若系统提供纳秒级精度(如果操作系统支持的话),该搜索应在32次迭代内收敛。

POSIX定义了 stat() 函数,以及一个 C编译器,因此如果你的系统有可用的编译器,你可以直接写一个shell脚本来编译你自己的简单程序。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章