问题描述
我想要一种方法来查找和打印文件的修改时间,以便在 bash 脚本中使用。
我想出了:
ls -l $filename | cut -d ' ' -f '6-8'
哪个输出:
Jul 26 15:05
尽管我想避免解析 ls
,但将年份放在其中也会很有用。
理想情况下,我希望看到类似于 date
命令的默认输出的输出。
Tue Jul 26 15:20:59 BST 2016
还有哪些有用的方法?
最佳方法
不要使用 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
这样的输出,请使用 Epoch 时间作为 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
。