![通过电子邮件发送最近创建的文件](https://linux22.com/image/41161/%E9%80%9A%E8%BF%87%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E5%8F%91%E9%80%81%E6%9C%80%E8%BF%91%E5%88%9B%E5%BB%BA%E7%9A%84%E6%96%87%E4%BB%B6.png)
我正在尝试每 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
查看您可能希望从输出中排除的其他文件类型。