2012-06-05 53 views

回答

24

这是Banthar的解决方案有所不同,但它会随着find版本不支持-newermt工作,它展示了如何使用xargs命令,该命令是一个非常有用的工具。

您可以使用find命令来查找“特定时代”的文件。这将找到修改的所有文件之间5和10天前:

find /directory -type f -mtime -10 -mtime +5 

为了然后搜索这些文件的字符串:

find /directory -type f -mtime -10 -mtime +5 -print0 | 
    xargs -0 grep -l expression 

您还可以使用-exec开关,但我觉得xargs更具可读性(并且它通常也会表现得更好,但可能不会在这种情况下)。

(注意:-0标志是有没有让这个命令对带空格的文件进行操作,如this is my filename

更新注释中的问题

当你find提供多种表情,他们在一起。例如,如果你问:

find . -name foo -size +10k 

... find将只返回那些文件都(一)评选foo(B)大于10千字节大。同样,如果您指定:

find . -mtime -10 -mtime +5 

... find将只返回文件,这些文件(一)更新于10天前(B)超过5天以上。

例如,我的系统上它目前是:

$ date 
Fri Aug 19 12:55:21 EDT 2016 

我有以下文件:

$ ls -l 
total 0 
-rw-rw-r--. 1 lars lars 0 Aug 15 00:00 file1 
-rw-rw-r--. 1 lars lars 0 Aug 10 00:00 file2 
-rw-rw-r--. 1 lars lars 0 Aug 5 00:00 file3 

如果我要“修改超过5天前的文件(-mtime +5)我得到:

$ find . -mtime +5 
./file3 
./file2 

但如果我要求“文件修改超过5天前但少于10天ag O”(-mtime +5 -mtime -10),我得到:

$ find . -mtime +5 -mtime -10 
./file2 
+0

有人可以请解释如何指定-mtime两次用于指定范围?具体来说,为什么第一次出现负数,第二次出现正数呢?要么我不理解它,要么它不适用于Ubuntu 14.04.3 LTS。在我看到的手册页中没有讨论它。 – battey

+0

@battey,我已经更新了我的回答并回复了你的问题。 – larsks

14

find结合的grep:

find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \; 
+1

这个'-newermt'选项似乎没有记录 - 它不会出现在我的手册页中的链接中。但是,这太棒了!你是如何发现它的? – brandizzi

+2

@brandizzi它在'-newerXY'下。 –

-1

find似乎并不有选择,您可以指定时间戳比较具体日期(至少在我的笔记本电脑上的版本不 - 可能还有其他版本和/或其他类似的工具),因此您必须使用天数。因此,截至2012年6月5日,您想查找比9天更早但超过6天的文件:

find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ