如果可能的话,使用相反的情况

如果可能的话,使用相反的情况

我是 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/1903/10/201903/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 +%bOctdate +%#b所以OCToCTdate +%#p它不是date +%p一个“每个字符”的大小写切换,而是将字符串中所有字符的大小写设置为大多数字符的相反大小写?还给出或,但 或 都不会改变其输出。我对这种情况的猜测是只是 的别名,而且似乎每当您添加多个标志时,行为都是未定义/不可预测的PMAMpmamdate +%Ppmamdate +%^Pdate +%#P%P%#p例如,date +%0-e给出的结果与 相同date +%-e:给出的结果3date +%-0e相同date +%0e03,这会让您认为只有字母旁边的标志有效,或者它从左到右,但 和 都date +%#^p给出date +%^#ppmam[当然取决于时间]除非其中存在一些隐藏的操作顺序?抱歉跑题了……

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

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

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

相关内容