获取文件的最后修改时间

获取文件的最后修改时间

Jul 22我想从输出中提取拉伸:

-rw-rw-r-- 1 douglas douglas  92188 Jul 22 08:47 master-terfron-21-07.log

这是该命令的输出:

ls -l *.log

我如何使用正则表达式来获取所需的部分?

答案1

.log由于您只想要当前目录中文件的最后修改时间(月份和日期),因此您可以简单地使用-r选项date。无需任何正则表达式或其他多余的命令。

您可以使用这个 shell 单行命令:

for i in *.log; do echo "$i: $(date '+%b-%d' -r "$i")"; done

.txt例如,我查找当前目录中所有文件的最后修改月份和日期:

$ for i in *.txt; do echo "$i: $(date '+%b-%d' -r "$i")"; done
file.txt: Feb-12
new.txt: Jul-23

这里涉及的主要命令是:

date '+%b-%d' -r file.txt

$ date '+%b-%d' -r file.txt 
Feb-12

如果要递归执行操作,请使用find

find . -type f -name '*.txt' -printf '%p: ' -exec date '+%b-%d' -r {} \;

例子 :

$ find . -type f -name '*.txt' -printf '%p: ' -exec date '+%b-%d' -r {} \;
./foo/list.txt: Jul-16
./new.txt: Jul-15
./file.txt: Jul-23

编辑 :

为了以原始regex方式回答:

$ ls -l *.txt | grep -Po '.*[[:digit:]]+ \K[[:alpha:]]{3} [[:digit:]]{2}'
Jul 23
Jul 15
  • grep -Po表示我们将使用 PCRE 并仅取匹配的部分

  • .*[[:digit:]]+匹配到我们想要的部分并\K丢弃匹配

  • [[:alpha:]]{3} [[:digit:]]{2}匹配三个字母字符(月份)后跟一个空格和两个数字(日期)。

答案2

要获取文件的最后修改日期,您可以使用:

$ stat -c '%n: %y' *.log
alternatives.log: 2015-07-20 09:28:52.727063510 +0200
apport.log: 2015-07-23 09:32:58.282590564 +0200

查看stat手册页以了解更多选项。

答案3

一个更简单的解决方案是ls使用cut

ls -l filename | cut -f 6,7 -d' '

例子:

$ touch file
$ ls -l file | cut -f 6,7 -d' '
Jul 23

另一个解决方案:

 ls -l filename |awk {'print $9" was last modified   "$6" "$7'}

相关内容