Bash

通過電子郵件發送最近創建的文件

  • August 7, 2014

我正在嘗試每 24 小時左右通過電子郵件發送一個日誌文件。目前我正在為此使用 mutt。你可以這樣呼叫 mutt:

mutt -s "Log" -a file_attachment example@example.com 

我知道我可以使用 find 和 mtime 列出最近創建的文件,但我希望能夠定義一個 bash 函式,該函式將在目錄中查找最近創建的文件,然後將其作為電子郵件附件發送。

我怎樣才能做到這一點?

zsh

mutt -s "Log" -a /path/to/*.log(.om[1]) example@example.com

這使用zsh glob 限定符。雖然其他 shell glob 只能根據其名稱生成文件名,但在 中zsh,您可以使用這些限定符((.om[1])如上),根據文件屬性(類型、大小、時間、權限…)或您自己的其他標准進行選擇,影響順序,應用各種轉換,或選擇一個範圍。

在這種情況下,我們使用這些限定符:

  • .: 只選擇正常文件。
  • om:按修改時間排序(最新的在前)
  • [1]: 只選擇第一個。

請注意,如果 中沒有log文件/path/to,則 glob 將失敗並且命令將被中止(如您所料,但其他 shell 的工作方式不同)。

GNUly,等價物類似於:

latest=$(
 find /path/to -maxdepth 1 -name '*.log' -printf '%T@:%p\0' |
   sort -rzg | sed -z 's/^[^:]*://;q'
)
[ -n "$latest" ] &&
 mutt -s "Log" -a "$latest" example@example.com

引用自:https://unix.stackexchange.com/questions/148864