我正在使用Ubuntu操作系统。我想在创建日期范围为2012年5月28日至2012年5月30日的所有日志文件中搜索一个单词(比如XYZ)。
我应该怎么做?
我正在使用Ubuntu操作系统。我想在创建日期范围为2012年5月28日至2012年5月30日的所有日志文件中搜索一个单词(比如XYZ)。
我应该怎么做?
这与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
,但我发现xargs
更易读(在某些情况下也可能表现更好,但在这种情况下可能不是这样)。
(请注意,-0
标志存在是为了让该命令操作带有嵌入空格的文件,例如this is my filename
。)
更新评论中的问题
当您向find
提供多个表达式时,它们会AND在一起。例如,如果您请求:
find . -name foo -size +10k
...find
命令只会返回文件名为foo
且文件大小大于10k的文件。同样地,如果您指定:
find . -mtime -10 -mtime +5
...find
只会返回创建时间在10天之内且早于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天前之内”(-mtime +5 -mtime -10
),我将得到:
$ find . -mtime +5 -mtime -10
./file2
将 find 与 grep 结合使用:
find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \;
-newermt
选项似乎没有记录 - 在链接和我的手册页中都没有出现。然而,它非常棒!你是怎么发现它的? - brandizzifind
似乎没有选项可以指定时间戳比较的特定日期(至少我电脑上的版本没有 - 可能有其他版本和/或类似的工具),所以你必须使用天数。 因此,截至2012/06/05,您要查找比9天新但早于6天的文件:
find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ
-mtime
(修改时间)?-ctime
是状态时间(无论那是什么)。 - Peter Mortensen