通过电子邮件发送最近创建的文件

通过电子邮件发送最近创建的文件

我正在尝试每 24 小时左右通过电子邮件发送一个日志文件。目前我正在使用 mutt 来实现这一点。你可以这样调用 mutt:

mutt -s "Log" -a file_attachment [email protected] 

我知道我可以使用 find 和 mtime 列出最近创建的文件,但我希望能够定义一个 bash 函数,该函数将在目录中查找最近创建的文件,然后将其作为电子邮件附件发送。

我怎样才能做到这一点?

答案1

zsh

mutt -s "Log" -a /path/to/*.log(.om[1]) [email protected]

那使用zsh 全局限定符。虽然其他 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" [email protected]

答案2

Get_Attachment_Name ()
{
   file_attachment_dir="Whatever you want your directory to be"
   file_attachment=`ls -lrt -- "$file_attachment_dir" | grep -v "^[bcdl]"| tail -n 1 | awk '{print $9}'`
}

删除以 b、c、d 或 l 开头的任何输出行将消除发送块特殊文件、字符特殊文件、目录或符号链接的尝试。

man ls查看您可能希望从输出中排除的其他文件类型。

相关内容