【问题标题】:Linux command to find text in most recent file matching name patternLinux命令在最近的文件匹配名称模式中查找文本
【发布时间】:2010-07-11 19:18:51
【问题描述】:

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

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 命令来选择最新的文件。我只是不知道该怎么做。

【问题讨论】:

    标签: linux command-line find grep


    【解决方案1】:

    连下面的也能做到。

    ls -t | head -n1 name_pattern.o*
    

    这将选择以给定模式开头的文件,最新的时间戳在最前面,并且只取第一个文件。所以最后这样做,

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

    【讨论】:

      【解决方案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*`
      

      【讨论】:

      • 一行有这么多东西,我真的会把它分解并做一些错误检查(即是否有 0 个文件),但理论上是的
      • 对不起,我删除了该评论,因为格式很奇怪。基本上,我只想将该 grep 放在 if 语句中,看看它是否找到了该行。但我可以将值存储在一个变量中并检查它。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 2014-12-11
      • 2014-02-04
      • 2016-01-19
      • 2020-03-03
      • 2011-06-13
      • 2023-03-04
      相关资源
      最近更新 更多