grep 输出文件路径和文件修改日期?

grep 输出文件路径和文件修改日期?

是否可以像这样使grep命令输出带有文件修改日期的文件路径:

12-02-2015 /file/path/to/the/file
16-02-2015 /file/path/to/the/file
25-02-2015 /file/path/to/the/file
03-04-2015 /file/path/to/the/file

或者:

/file/path/to/the/file 12-02-2015
/file/path/to/the/file 12-02-2015
/file/path/to/the/file 12-02-2015
/file/path/to/the/file 12-02-2015

答案1

grep本身没有这个功能。但您可以使用awk。使用该语法:

grep -Hr pattern . | awk -F: '{"stat -c %z "$1 | getline r; print r": "$0 }'

这会强制grep打印文件名-H-r表示在给定目录中进行递归搜索.awk的字段分隔符设置为:。第一个变量$1现在包含文件名。对每个文件名awk进行调用stat -c %z,以人类可读的格式提供修改时间。这被保存到变量中r,并打印在每个搜索结果的前面。

答案2

这是一个更容易理解的替代方法,使用 xargs

grep -rl pattern | xargs stat -c %n':'%z | awk -F: '{print $1}'

答案3

事实证明您可以使用find -exec它来做到这一点。以下不是一个完整的示例,因为它没有输出所要求的格式。

 find . -exec grep -q set {} \; -exec stat -c "%y %n" {} \;

...

2019-06-03 11:46:14.565890000 -0700 ./bin/tkdiff_helper.sh

2018-04-24 12:00:02.389077000 -0700 ./bin/start_vnc.older 2019-09-04

08:41:49.021891000 -0700 ./bin/calmdpv_2016

...

仅当 grep 找到匹配项时,第二个 exec 才会运行。

-q是相当 grep。

答案4

grep 实用程序不是为此而设计的,而是用于过滤文件或命令输出中的行。您可以通过管道将它与 awk 结合起来以获得所需的结果,如下所示:

find . -iname 'file-you-want-to-find' -exec stat -c "%y %n" {} \; | awk '{ print $4 " " $1 }' | grep 'date-you-are-looking-for'

此致。

相关内容