我是 Linux 新手。我正在使用命令行。我想查看文件的最后修改日期。如何在 Linux 中从命令行执行此操作?
答案1
正如@edvinas.me 所提到的,stat
它会告诉您有关文件的各种信息,包括最后修改日期。
一开始我很困惑调整和改变,只是为了澄清,stat
输出列表:
- 使用权显示上次数据访问(例如读取)的时间。
- 调整显示最后数据修改的时间。
- 改变显示文件状态最后改变的时间。
例如:
~ $ 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: -
答案2
使用stat
命令来实现:
$ stat file
答案3
另一种更灵活的方法是使用date -r
。来自man date
:
-r, --reference=FILE
display the last modification time of FILE
这样做的好处是可以让你指定输出格式,例如
$ 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
答案4
建立在@Adam Taylor 在 @phoops 的回答和@Sparhawk 的回答中的评论。
具体来说只是获取日期(以 2019 年 10 月 3 日为例,因为那是我上一个生日)
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 语言环境的完整月份名称(例如,January)
...
%d 月份中的日期(例如,01)
%D 日期;与 %m/%d/%y 相同
%e 月份中的日期,用空格填充;与 %_d 相同
%F 完整日期;与 %Y-%m-%d 相同
...
%m 月份(01..12)
...
%x 语言环境的日期表示(例如,12/31/99)
...
%y 年份的最后两位数字(00..99)
%Y 年份
...
默认情况下,日期用零填充数字字段。`
%' 后面可以跟以下可选标志:
-(连字符)不填充字段
_(下划线)用空格填充
0(零)用零填充
^ 尽可能使用大写
如果可能的话,使用相反的情况
注意:这些标志不适用于“组合格式“喜欢%F
,%D
和%x
。它们是为了”单数字段格式“。
显然这最后面旗帜(#) 不能像我预期的那样工作(例如,如果给出 ,则给出而不是 )我猜这会没用,但我认为小写选项会更有用。分别将 或 变成date +%b
或Oct
。date +%#b
所以OCT
我oCT
想date +%#p
它不是date +%p
一个“每个字符”的大小写切换,而是将字符串中所有字符的大小写设置为大多数字符的相反大小写?还给出或,但 或 都不会改变其输出。我对这种情况的猜测是只是 的别名,而且似乎每当您添加多个标志时,行为都是未定义/不可预测的PM
AM
pm
am
date +%P
pm
am
date +%^P
date +%#P
%P
%#p
(例如,date +%0-e
给出的结果与 相同date +%-e
:给出的结果3
与date +%-0e
相同date +%0e
:03
,这会让您认为只有字母旁边的标志有效,或者它从左到右,但 和 都date +%#^p
给出date +%^#p
或pm
,am
[当然取决于时间])除非其中存在一些隐藏的操作顺序?抱歉跑题了……
另外,如果您运行命令locale -k LC_TIME | grep ^d_fmt
,您可以看到系统特定区域设置的组合(例如d_fmt="%m/%d/%Y"
)。
你可以制作自己的组合。例如,
date +%^b\ %-e\ %Y -r file
会给你OCT 3 2019