按扩展名查找包含特定文本的文件,并显示文件路径和修改日期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按扩展名查找包含特定文本的文件,并显示文件路径和修改日期相关的知识,希望对你有一定的参考价值。

我需要在其内容中找到包含“abc”的所有.txt文件,并显示文件路径和修改日期:

也许是这样的:

> find /folder -iname '*.txt' -print0 | xargs -0 grep -i -n -l "abc" | xargs echo <filepath> <modified_date>

预期产量:

/folder/hello.txt 2017-12-12 32:56:23
/folder/d1/d2/hey.txt 2017-12-12 32:56:23
答案

看来你有GNU find,所以你可以使用-printf谓词。这应该让你走上正轨:

find /folder -iname '*.txt' -type f -exec grep -q 'abc' {} ; -printf '%p %Tx %Tr
'

%T谓词的-printf修饰符是你正在寻找的。有趣的xr是日期和时间。来自man find的更多信息:

                 @      seconds  since Jan. 1, 1970, 00:00 GMT, with frac‐
                        tional part.

                 Time fields:

                 H      hour (00..23)

                 I      hour (01..12)

                 k      hour ( 0..23)

                 l      hour ( 1..12)

                 M      minute (00..59)

                 p      locale's AM or PM

                 r      time, 12-hour (hh:mm:ss [AP]M)

                 S      Second (00.00 .. 61.00).  There  is  a  fractional
                        part.

                 T      time, 24-hour (hh:mm:ss.xxxxxxxxxx)

                 +      Date  and  time,  separated  by  `+',  for example
                        `2004-04-28+22:22:05.0'.  This is a GNU extension.
                        The  time  is given in the current timezone (which
                        may be affected  by  setting  the  TZ  environment
                        variable).   The  seconds  field  includes a frac‐
                        tional part.

                 X      locale's time representation (H:M:S).  The seconds
                        field includes a fractional part.

                 Z      time  zone (e.g., EDT), or nothing if no time zone
                        is determinable

                 Date fields:

                 a      locale's abbreviated weekday name (Sun..Sat)

                 A      locale's full weekday name, variable length  (Sun‐
                        day..Saturday)

                 b      locale's abbreviated month name (Jan..Dec)

                 B      locale's  full  month name, variable length (Janu‐
                        ary..December)

                 c      locale's date and time (Sat Nov  04  12:02:33  EST
                        1989).  The format is the same as for ctime(3) and
                        so to preserve  compatibility  with  that  format,
                        there is no fractional part in the seconds field.

                 d      day of month (01..31)

                 D      date (mm/dd/yy)

                 h      same as b

                 j      day of year (001..366)

                 m      month (01..12)

                 U      week  number  of  year with Sunday as first day of
                        week (00..53)

                 w      day of week (0..6)

                 W      week number of year with Monday as  first  day  of
                        week (00..53)

                 x      locale's date representation (mm/dd/yy)

                 y      last two digits of year (00..99)

                 Y      year (1970...)

以上是关于按扩展名查找包含特定文本的文件,并显示文件路径和修改日期的主要内容,如果未能解决你的问题,请参考以下文章

linux查找并输出特定行和它的前一行且在后面再输出一个空白行的命令

linux 上查找包含特定文本的所有文件

ubuntu中在终端下如何查找具有某一特定字符串的文件?

如何在 Visual Studio Code 中搜索具有特定扩展名且包含特定文本的文件

在文件夹中查找具有特定扩展名的文件

在 pdf 文件中查找特定文本并使用文本打印文件名和行