在 Linux 中获取文件的最后修改日期

use*_*192 215 linux command-line

我是 Linux 新手。我正在使用命令行。我正在尝试查看文件的上次修改日期。如何从命令行在 Linux 中执行此操作?

nep*_*tom 205

正如@edvinas.me 所提到的,它会stat告诉您有关该文件的各种信息,包括上次修改日期。

起初,我对ModifyChange感到困惑,只是为了澄清,stat输出列表:

  • 访问显示上次数据访问(例如读取)的时间。
  • Modify显示上次修改数据的时间。
  • Change显示文件状态上次更改的时间。

例如:

~ $ touch foo
~ $ stat foo
File: ‘foo’
Size: 0             Blocks: 0          IO Block: 4096   regular empty file
Device: fc01h/64513d    Inode: 410397      Links: 1
Access: (0644/-rw-r--r--)  Uid: (80972/ etomort)   Gid: (18429/  eem_tw)
Access: 2015-09-21 12:06:11.343616258 +0200
Modify: 2015-09-21 12:06:11.343616258 +0200
Change: 2015-09-21 12:06:11.343616258 +0200
Birth: -

~ $ echo "Added bar to foo file" >> foo
~ $ stat foo
File: ‘foo’
Size: 42            Blocks: 8          IO Block: 4096   regular file
Device: fc01h/64513d    Inode: 410654      Links: 1
Access: (0644/-rw-r--r--)  Uid: (80972/ etomort)   Gid: (18429/  eem_tw)
Access: 2015-09-21 12:09:31.298712951 +0200
Modify: 2015-09-21 12:09:31.298712951 +0200
Change: 2015-09-21 12:09:31.302713093 +0200
Birth: -

~ $ chmod 444 foo
~ $ stat foo
File: ‘foo’
Size: 42            Blocks: 8          IO Block: 4096   regular file
Device: fc01h/64513d    Inode: 410654      Links: 1
Access: (0444/-r--r--r--)  Uid: (80972/ etomort)   Gid: (18429/  eem_tw)
Access: 2015-09-21 12:09:31.298712951 +0200
Modify: 2015-09-21 12:09:31.298712951 +0200
Change: 2015-09-21 12:10:16.040310543 +0200
Birth: -
Run Code Online (Sandbox Code Playgroud)


pho*_*ops 86

stat为此使用命令:

$ stat file
Run Code Online (Sandbox Code Playgroud)

  • 如果您只需要最后修改日期(以人类可读的形式),请使用 `stat -c '%y' file` (38认同)

Spa*_*awk 66

另一种更灵活的方法是使用date -r. 来自man date

-r, --reference=FILE
       display the last modification time of FILE
Run Code Online (Sandbox Code Playgroud)

这具有允许您指定输出格式的优点,例如

$ date -r foo
Thu Aug 31 10:36:28 AEST 2017
$ date -r foo -R
Thu, 31 Aug 2017 10:36:28 +1000
$ date -r foo -u
Thu Aug 31 00:36:28 UTC 2017
$ date -r foo +%s
1504139788
Run Code Online (Sandbox Code Playgroud)

  • 是的,很有帮助,谢谢。这是一个 bash 函数,它将重命名一个文件,以修改时间为前缀: function mvfilestime() { if [ x"${1}" = "x" ] ; 然后 echo "mvfilestime: Missing argument of file to mv" else f=$(date +"%Y-%m-%d-%H-%M" -r ${1})-${1} echo mv $ {1} ${f} mv ${1} ${f} fi } (3认同)
  • iso-8601:`date -r foo -u +"%Y-%m-%dT%H:%M:%SZ"`(适用于 Linux 和 OSX) (3认同)

小智 20

ls -l 应该做的工作。

例子:

#> ls -l /home/TEST/
total 16

-rw-r--r--   1 rfmas1   nms          949 Nov 16 12:21 create_nd_lists.py

-rw-r--r--   1 rfmas1   nms            0 Nov 16 12:35 enb_list

-rw-r--r--   1 rfmas1   nms            0 Nov 16 12:35 nb_list

-rw-r--r--   1 rfmas1   nms            0 Nov 16 12:35 nodes_ip.txt

-rw-r--r--   1 rfmas1   nms            0 Nov 16 12:35 rnc_list
Run Code Online (Sandbox Code Playgroud)


Lev*_*ike 7

基于@Adam Taylor 在@phoops 的回答和@Sparhawk 的回答中的评论。

具体来说就是获取日期(使用 2019 年 10 月 3 日作为例子,因为这是我的最后一个生日,如果你觉得在经济上祝福我,这是我的 venmo:@levi_uzodike)

  • stat -c %y file | cut -d' ' -f1 会给你 2019-10-03
  • date +%F -r file 也会给你 2019-10-03
  • date +%D -r file 会给你 10/03/19
  • date +%x -r file可能会使这两种10/03/2019,或者10/03/19如果你在美国和是要么03/10/2019,或者03/10/19如果你在英国的时候,仅举几个例子(当然也有更多的可能性)

date我了解,这些格式选项是其他格式选项的组合。以下是手册页中的一些解释:

%b 语言环境的缩写月份名称(例如,Jan)
%B 语言环境的完整月份名称(例如,一月)
...
%d 月份中的第几天(例如,01)
%D 日期;与 %m/%d/%y
%e 月中的某一天相同,填充了空格;与 %_d
%F 完整日期相同;与 %Y-%m-%d
...
%m 月 (01..12)
...
%x 语言环境的日期表示相同(例如,12/31/99)
...
%y 年份的最后两位数字( 00..99)
%Y year
...
默认情况下,日期用零填充数字字段。
以下可选标志可以跟在 `%' 后面:

-(连字符)不要
用空格填充字段_(下划线)用空格填充
0(零)用零填充
^ 尽可能使用大写
#尽可能使用相反的大小写

注意:这些标志不适用于“组合格式”,例如%F,%D%x。它们用于“单一字段格式”。

显然,最后一个标志 ( # ) 不像我期望的那样工作(例如,如果date +%bOctdate +%#bOCT而不是oCT)我想这没用,但我认为小写选项会更有用。date +%#p确实变成date +%pwhich 可能会分别给PMAM变成pmam。所以我想这不是“每个字符”大小写切换,而是将字符串中所有字符的大小写设置为大多数字符的相反大小写?也date +%P给出pmor am,但既不date +%^P也不date +%#P改变其输出。我对这种情况的猜测是这%P只是一个别名%#p,而且似乎每当您添加多个标志时,行为都是未定义/不可预测的例如,date +%0-e给出与date +%-e:相同的结果,3并且date +%-0e给出与date +%0e:相同的结果03,这让您认为只有字母旁边的标志有效,或者它那张左到右,但两者date +%#^pdate +%^#p给予pmam[取决于课程的时间] ,除非有操作的一些隐藏的秩序?抱歉跑题了...

此外,如果您运行该命令locale -k LC_TIME | grep ^d_fmt,您可以看到系统特定区域设置的组合(例如,d_fmt="%m/%d/%Y")。

你可以制作自己的组合。例如,

  • date +%^b\ %-e\ %Y -r file 会给你 OCT 3 2019