我在一个目录下的多个目录中有一堆电子邮件作为文本文件。我正在尝试编写一个脚本,我将输入一个日期作为3个单独的命令行参数,如下所示:
findemail 2015 20 04
格式为yyyy / dd / mm,它会显示当天发送的电子邮件的所有文件名。我不确定从哪里开始这个。我想我可以使用find,但我不熟悉脚本,所以我不确定。任何帮助将不胜感激!
电子邮件中的时间戳如下:
TimeStamp: 02/01/2004 at 11:19:02
(格式与输入格式相同)
答案 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 。)