这与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标志是让这个命令对具有嵌入空格的文件进行操作,例如这是我的文件名.)
评论中的问题更新
当您提供多个表达式来查找时,它们将被AND组合在一起.例如,如果你要求:
find . -name foo -size +10k
… find只会返回(a)命名为foo和(b)大于10 kbytes的文件.同样,如果您指定:
find . -mtime -10 -mtime +5
…发现只会返回(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)我得到:
$find . -mtime +5
./file3
./file2
但是,如果我要求“文件修改超过5天前但不到10天前”(-mtime 5 -mtime -10),我得到:
$find . -mtime +5 -mtime -10
./file2