Linux Grep在日期范围内创建的所有文件中
我在Ubuntu操作系统上。我想在2012年5月28日至2012年5月30日期间创建的所有日志文件中添加一个单词(比如XYZ) 如何做到这一点?将grep与:Linux Grep在日期范围内创建的所有文件中,linux,ubuntu,find,grep,date-range,Linux,Ubuntu,Find,Grep,Date Range,我在Ubuntu操作系统上。我想在2012年5月28日至2012年5月30日期间创建的所有日志文件中添加一个单词(比如XYZ) 如何做到这一点?将grep与: 这与Banthar的解决方案稍有不同,但它将适用于不支持-newermt的find版本,并演示如何使用xargs命令,这是一个非常有用的工具 您可以使用find命令查找“某一时期”的文件。这将查找5到10天前修改的所有文件: find /directory -type f -mtime -10 -mtime +5 然后在这些文件中搜索
这与Banthar的解决方案稍有不同,但它将适用于不支持
-newermt
的find
版本,并演示如何使用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
标志允许此命令对带有嵌入空格的文件进行操作,例如这是我的文件名
)
更新评论中的问题
当您为查找提供多个表达式时,它们将被合并在一起。例如,如果您要求:
find . -name foo -size +10k
…find
将只返回(a)名为foo
和(b)大于10 KB的文件。类似地,如果您指定:
find . -mtime -10 -mtime +5
…find
将只返回(a)比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
),我会得到:
但如果我要求“文件在5天前修改,但不到10天前修改”(-mtime+5-mtime-10
),我会得到:
find
似乎没有为时间戳比较指定具体日期的选项(至少我笔记本电脑上的版本没有-可能有其他版本和/或其他工具执行类似操作),因此您必须使用天数。因此,从2012/06/05起,您希望查找比9天新但比6天旧的文件:
find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ
这个-newermt
选项似乎没有文档记录-它既没有出现在链接中,也没有出现在我的手册页中。但是,它太棒了!你是如何发现它的?@brandizzi它在-newerXY
下。服务器故障中的一个相关问题:有人能解释一下如何使用指定-mtime两次来指定范围吗?具体来说,为什么是neg第一次出现的是一个数字,第二次出现的是一个正数?要么我不明白,要么它在Ubuntu 14.04.3 LTS上不起作用。我看到的手册页中没有讨论它。@battey,我更新了我的答案,回答了你的问题。为什么不-mtime
(修改时间)?-ctime
表示状态时间(无论是什么)。
$ find . -mtime +5
./file3
./file2
$ find . -mtime +5 -mtime -10
./file2
find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ