Linux命令在最近的文件匹配名称模式中查找文本

时间:2010-07-11 19:18:52

标签: linux command-line find grep

我有一个像这样的文件目录:

parent
    /dir1
        file1
        file2
        other
        something
        name_pattern.o23409284
        name_pattern.o29203429
        name_pattern.o39208235
    /dir2
    ...

我想运行一个命令,该命令将在最新的name_pattern.o *文件中查找以:

开头的行
***END

所以看起来很容易

grep -c '***END' name_pattern.o*

但我想只查看最新文件并忽略所有其他文件。所以我想我需要某种find命令来选择最新的文件。我只是不知道该怎么做。

2 个答案:

答案 0 :(得分:4)

即便如下也可以。

ls -t | head -n1 name_pattern.o*

这将选择以给定模式开头的文件,最新的时间戳首先出现,并且只接受第一个文件。所以最后这样做,

grep -c '***END' `ls -t | head -n1 name_pattern.o*`

答案 1 :(得分:2)

perl -e 'print( ( sort { -M $a <=> -M $b } @ARGV )[0], "\n");' name_pattern.o*

按最后修改时间对它们进行排序。交换$ a和$ b,让它给出最旧的。还有“查找”的修改标志,但我发现很难找到比较目录内的操作......

如果您需要单行:

grep '***END' `perl -e 'print( ( sort { -M $a <=> -M $b } @ARGV )[0], "\n");' name_pattern.o*`