在bash中查找文本文件

时间:2015-04-20 23:36:57

标签: bash unix scripting

我在一个目录下的多个目录中有一堆电子邮件作为文本文件。我正在尝试编写一个脚本,我将输入一个日期作为3个单独的命令行参数,如下所示:

findemail 2015 20 04 

格式为yyyy / dd / mm,它会显示当天发送的电子邮件的所有文件名。我不确定从哪里开始这个。我想我可以使用find,但我不熟悉脚本,所以我不确定。任何帮助将不胜感激!

电子邮件中的时间戳如下:

TimeStamp: 02/01/2004 at 11:19:02(格式与输入格式相同)

2 个答案:

答案 0 :(得分:0)

最简单的方法是使用grep等搜索工具。 Grep有一个非常有用的递归选项,允许在目录(和子目录)中易于使用的所有文件中搜索字符串。

假设您在名为timestamp的变量中有时间戳,那么这将返回包含时间戳的文件名列表:

grep -lr $timestamp /Your/Main/Directory/Goes/Here

编辑:为了澄清,这只会搜索确切的字符串,因此需要采用与搜索文本完全相同的格式。

答案 1 :(得分:0)

grep -lr "$(printf "^TimeStamp: %02i/%02i/%04i" "$2" "$1" "$3")" path/to/directory

正则表达式代表mm / dd / yyyy;如果您想要更明智的欧洲日期订单,请交换$1$2的订单。

命令substitute $(command ...)运行command ...并将其输出替换为包含命令替换的命令行。因此我们使用运行printf的子shell来创建grep的正则表达式参数。

-l选项表示列出匹配文件的名称; -r选项表示递归遍历一组目录。 (如果您的grep行人太多而无法使用-r选项,那么制作相同的find表达式肯定不难。请参阅例如here 。)