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

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

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

我想出了:

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

输出:

Jul 26 15:05

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

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

Tue Jul 26 15:20:59 BST 2016

还有哪些有用的方法?

答案1

不要使用ls,这是一份工作stat

stat -c '%y' filename

-c让我们获得特定的输出,这里%y将以人类可读的格式获取文件的最后修改时间。要获取自纪元以来的秒数,请使用%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另请参阅。

答案2

我试过

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"

相关内容