2015-04-20 71 views
1

我在一個目錄下的多個目錄中有一堆電子郵件作爲文本文件。我試圖寫一個腳本在那裏我會在日期爲3個獨立的命令行參數,像這樣類型:在bash中查找文本文件

findemail 2015 20 04 

格式爲YYYY/DD/MM,它會彈出已發送的電子郵件的所有文件名在那一天。我不確定從哪裏開始。我想我可以使用查找可能,但我是新手腳本,所以我不確定。任何幫助將不勝感激!

在電子郵件中的時間戳的樣子:

TimeStamp: 02/01/2004 at 11:19:02(仍處於相同的格式輸入)

+0

我想你使用'時間戳:'爲內容的佔位符,其真正確實發生在普通的標準電子郵件中。 'Date:'標題將是您的第一選擇,但通過惡意(垃圾郵件發送者)或無能(垃圾郵件發送者等),此郵件頭有時最終會包含除郵件實際提交日期之外的其他內容。 – tripleee

回答

0

做的是使用一個搜索工具,如grep最容易的事情。 Grep有一個非常有用的遞歸選項,它允許在目錄(和子目錄)中的所有文件中搜索易於使用的字符串。

假設你有一個名爲timestamp變量你時間戳,那麼這將返回包含時間戳的文件名列表:

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

編輯:爲了澄清,這隻會搜索精確字符串,因此它需要與搜索文本中的格式完全相同。

+0

謝謝。如果他們在2014年1月1日輸入,我將如何處理? (而不是2014 01 01) – Sal

+0

最簡單的方法是一次提示用戶每個部件一次。所以一年一次,一月一次,一天一次。然後檢查以確保月份中有兩個字符,如下所示:lengthofmonthstring = $ {#monthinputvar}'那麼如果lengthofmonthstring不是2,則再次詢問用戶。這種方式也確保用戶輸入正確格式的所有內容(即不會在一天之前放置一個月) – TheInnerParty

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

正則表達式尋找mm/dd/yyyy;如果您想要更合理的歐洲日期定單,請交換$1$2的定單。

命令替換$(command ...)運行command ...並將其輸出替換爲包含命令替換的命令行。因此,我們使用運行printf的子shell來創建grep的正則表達式參數。

-l選項說明列出匹配文件的名稱; -r選項表示遞歸地遍歷一組目錄。 (如果你的grep是太行人有-r選項,它肯定不是很難炮製find表達其做同樣見如here。)