如何显示文件的修改时间?


35

我想要一种方法来查找和打印文件的修改时间,以供在bash脚本中使用。

我想出了:

ls -l $filename | cut -d ' ' -f '6-8'

哪个输出:

Jul 26 15:05

尽管我想避免解析ls,但将年份包含在其中也很有用。

理想情况下,我希望看到类似于date命令默认输出的输出。

Tue Jul 26 15:20:59 BST 2016

还有哪些其他有用的方法?

Answers:


46

不要使用ls,这是为以下工作stat

stat -c '%y' filename

-c让我们获取特定的输出,此处%y将以人类可读的格式获取文件的最后修改时间。要获取自Epoch以来的时间(以秒为单位),请使用%Y

stat -c '%Y' filename

如果您也想要文件名,请使用%n

stat -c '%y : %n' filename
stat -c '%Y : %n' filename

设置格式说明符以适合您的需要。检查man stat

例:

% stat -c '%y' foobar.txt
2016-07-26 12:15:16.897284828 +0600

% stat -c '%Y' foobar.txt
1469513716

% stat -c '%y : %n' foobar.txt
2016-07-26 12:15:16.897284828 +0600 : foobar.txt    

% stat -c '%Y : %n' foobar.txt
1469513716 : foobar.txt

如果您希望输出类似Tue Jul 26 15:20:59 BST 2016,则使用纪元时间作为输入date

% date -d "@$(stat -c '%Y' a.out)" '+%a %b %d %T %Z %Y'
Tue Jul 26 12:15:21 BDT 2016

% date -d "@$(stat -c '%Y' a.out)" '+%c'               
Tue 26 Jul 2016 12:15:21 PM BDT

% date -d "@$(stat -c '%Y' a.out)"
Tue Jul 26 12:15:21 BDT 2016

检查date的格式说明符来满足您的需求。见man date也。


5
进一步回答这个问题时,请记住,ls在整个系统中不一致地实现该功能,因此不能用于任何类型的自动化。而是在编写脚本时使用诸如stat和之类的命令find
Paddy Landau

1
优秀。我不知道这个小宝贝。在* nix / linux环境中,有许多这样的东西尚未被发现。
肯·英格拉姆

1

我试过了

ls -l $filename | cut -d ' ' -f '6-8'

但是如果日期少于10,则会错过时间。这是因为日期前的多余空间小于10。请尝试以下操作:

filename="test.txt"
ls -l $filename | awk -F ' ' '{print $6" "$7" "$8}'

awk命令显示由所有空格(-F'')分隔的字段。希望它能工作。我知道这并不能回答最初的问题,而只是对ls命令的说明,仅涉及日期和时间。当您使用Google“ ubuntu获取文件的日期和时间”时,它会在顶部列出该问题,这正是我一直在寻找的问题,因为我也不需要年份。对于年份,日期和时间,您可以尝试以下命令之一。%m打印月份号。%b打印月份的缩写:如果不需要小时和分钟,请删除%H:%M。%-d在该月的某天不会显示前导零。

date -r $filename +"%Y %m %-d %H:%M"
date -r $filename +"%y %m %-d %H:%M"
date -r $filename +"%Y %b %-d %H:%M"
date -r $filename +"%y %b %-d %H:%M"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.