当前位置: 首页 > 面试题库 >

Grep在日期范围内创建的所有文件中

房新翰
2023-03-14
问题内容

我在Ubuntu OS上。我想在日期范围为2012年5月28日至2012年5月30日创建的所有日志文件中添加一个单词(例如XYZ)。

我怎么做?


问题答案:

这与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,它们将被AND在一起。例如,如果您要求:

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)修改过的文件,则会得到:

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

但是,如果我要求“修改超过5天但不到10天的文件”(-mtime +5 -mtime -10),则会得到:

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


 类似资料:
  • 问题内容: 想创建一个日期列表,从今天开始,然后返回任意天数,例如在我的示例中为100天。有没有比这更好的方法了? 问题答案: 略胜一筹…

  • 问题内容: 动态创建日期范围以便与报表配合使用的最佳方法。 因此,如果给定的一天没有活动,我可以避免报表上的空行。 通常是为了避免此问题:在sql结果中(在mysql或perl端)填充空日期的最直接方法是什么? 问题答案: 在MySQL中,没有直接的方法可以做到这一点。最好的选择是用您选择的服务器端语言生成一个daterange数组,然后从数据库中提取数据,并使用date作为键将结果数组与date

  • > 每个对象表示一个重复发生的事件。该事件可以在多个日期发生。因此,请考虑以下内容: 我有一个日历在客户端,用户可以选择一个日期范围。 > 对所选日期范围的每个条目进行调用,并在客户端处理聚合。问题是会有大量的读取,因为我们会多次读取重叠的日期范围内的同一个列表对象。 尝试使用类似ElasticSearch/Algolia的服务来完成此操作 任何建议都会很有帮助!

  • 问题内容: 我最近遇到了一项任务,必须在日期范围内获得所有星期五。我写了一小段代码,很惊讶地看到一些奇怪的行为。 下面是我的代码: 现在,当我运行代码时,我注意到缺少2011年的星期五。经过一些调试和在线浏览后,我发现这是特定于区域设置的,我必须使用它来修复它。 因此,在上面的代码中未注释相关行。 据我了解,一年的第一周应该从一年的整个星期开始。 例如,2010年1月1日是星期五。但它不会显示在结

  • 问题内容: 这个问题已经在这里有了答案 : 从日期范围生成天数 (29个答案) 7年前关闭。 我想显示a 和MySQL中的日期之间的所有日期。 例如,具有和字段的表中的数据为: 日期是和 日期, 我想要的结果是: 如何仅使用MySQL查询来实现此目的(而不必使用存储过程,因为我对此并不熟悉)? 编辑: 尽管我仍然没有完全得到想要的结果,但是这里的答案很有帮助。在此示例中,它仅成功运行,但不输出任何

  • 问题内容: 我有一个表,例如此数据 我想有一个查询,将日期分开,所以我有像这样一年中分开的金额: 2013年有25个月是因为2013年有1个月,而2014年有75个月是因为有3个月 有没有办法在T-SQL中做到这一点? 提前谢谢! 问题答案: 使用表格创建日历表格,然后将其加入表格以将日期范围划分为所需的任何部分。 如果按年份除以金额,然后除以月份,您可以: 这是SQL FIDDLE DEMO。