获取文件最后修改时间

Rok*_*uta 1 command-line regex

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

-rw-rw-r-- 1 douglas douglas  92188 Jul 22 08:47 master-terfron-21-07.log
Run Code Online (Sandbox Code Playgroud)

这是命令的输出:

ls -l *.log
Run Code Online (Sandbox Code Playgroud)

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

hee*_*ayl 5

当你只想要的最后修改时间(月,日).log在当前目录下的文件,你可以简单地使用-r的选项date。不需要任何正则表达式或其他多余的命令。

您可以使用此外壳单线:

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

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

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

这里涉及的主要命令是:

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

$ date '+%b-%d' -r file.txt 
Feb-12
Run Code Online (Sandbox Code Playgroud)

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

find . -type f -name '*.txt' -printf '%p: ' -exec date '+%b-%d' -r {} \;
Run Code Online (Sandbox Code Playgroud)

例子 :

$ 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
Run Code Online (Sandbox Code Playgroud)

编辑 :

为了回答原来的regex方式:

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

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

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