2010-07-11 82 views
0

我有文件的目录,如下所示:Linux命令来查找最近的文件名匹配模式的文本

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
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

有这么多的事情在同一行,我真的打破它,做一些错误检查(即是否有0个文件),但在理论上,是 – eruciform 2010-07-11 19:42:24

+0

对不起,我删除了,因为评论格式很奇怪。基本上,我只想把这个grep放在一个if语句中,看看它是否找到那条线。但我可以将该值存储在变量中并检查。谢谢! – Matt 2010-07-11 19:43:54

+0

真棒,没问题。随时以绿色复选标记。 ;-) – eruciform 2010-07-11 19:51:36

4

即使以下也可以做到这一点。

ls -t | head -n1 name_pattern.o* 

这将选择以给定模式开始的文件,最新的时间戳在先,并且只取第一个文件。因此,最后做到这一点,

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

很酷,谢谢那个! – Matt 2010-07-13 03:12:25

+0

简洁而精确! – Nayeem 2015-08-27 09:32:03