如何获取最后一次在Unix中修改文件的时间

时间:2015-04-19 07:04:23

标签: shell unix

我正在尝试最后一次修改文件的日期。我使用变量作为日期,使用变量作为时间。

这将获取日期和时间,但我想使用-r使用date命令来反映上次修改日期的时间。我不确定如何在变量中使用它。

我将如何做到这一点?

以下是我的变数:

DATE="$(date  +'%m/%d/%Y')"
TIME="$(date  +'%H:%M')"

我尝试在时间和日期之前和之后放置-r

4 个答案:

答案 0 :(得分:0)

我认为你在寻找

ls -lt myfile.txt

在第6列中,您将看到文件何时被修改。

或者您可以使用stat myfile.txt来检查文件的修改时间。

答案 1 :(得分:0)

虽然人们可能会告诉你,你应该解析ls的输出,如果您的文件名包含制表符,空格,换行符,您的用户决定只需指定一组不同的ls选项,您找到的ls版本就不会像您预期的那样......

改为使用stat

stat -c '%Y'

将为您提供自epoch以来的秒数。

尝试

date -d "@$(stat -c '%Y' $myfile)" "+%m/%d/%Y"

获取日期,并通读man date以获得您想要的格式的时间,替换'%F'在上面的命令行中:

date -d "@$(stat -c '%Y' $myfile)" "+%H:%M"

编辑:使用您的格式。

EDIT2:我真的不认为你的日期格式是明智的,因为对于不是来自美国的人来说,它是如此模棱两可,而且它也不容易排序。但它是一种文化的东西,所以这更像是一个暗示:如果你想让你的国外人士可以使用,可以使用年月日作为格式,或者获取当前的语言环境设置格式日期。

答案 2 :(得分:0)

使用stat命令。

mtime=$(stat --format=%y filename)

答案 3 :(得分:0)

我知道这是一个非常的老问题,但是,为了完整起见,我在这里添加了一个额外的答案。

原始问题指定特定的操作系统。 stat 与受 SysV 启发的 Unix(例如 Linux)和受 BSD 启发的(例如 Free/Open/NetBSD、macOS/Darwin)有很大不同。

在 macOS Big Sur (11.5) 下,您可以使用单个 stat 命令获取文件的日期:

stat -t '%m/%d/%Y %H:%M' -f "%Sm" myfile.txt

会输出

04/10/2021 23:22

2021 年 4 月 10 日。

你可以很容易地把它放在两个命令中,一个用于日期,另一个用于时间,当然,以符合最初提出的问题。