从目录中选择最新更新的文件并通过电子邮件发送

从目录中选择最新更新的文件并通过电子邮件发送

我想从某个目录中选择最新的错误(时间戳).log 文件并通过电子邮件作为附件发送。我正在尝试的是:

文件名: abc.sh

echo 'An error occured' | mutt -s "Logs" -a '/xx/xx/logs/xx/*.log(.om[1])' -e 'my_hdr From:[email protected]' -- [email protected]

答案1

朴素的解决方案

我假设您的日志的文件名与 glob 匹配/xx/xx/logs/xx/*.log并且您想要将邮件发送到[email protected]

newest=$(ls -rt /xx/xx/logs/xx/*.log | tail -n 1)
echo 'An error occured' | mutt [email protected] -s "Logs" -a "$newest"

如果文件具有良好的名称,则此方法有效。但一般来说,解析 的输出ls是不可靠的。

更可靠的解决方案

这可以避免使用ls并且对于任何和所有文件名都是安全的:

inode=$(find /xx/xx/logs/xx/ -maxdepth 1 -type f -iname '*.log' -printf '%T@ %i\n' | sort -rn | awk '{print $2;exit;}')
newest=$(find /xx/xx/logs/xx/ -maxdepth 1 -inum "$inode")
echo 'An error occured' | mutt [email protected] -s "Logs" -a "$newest"

测试以查看选择了哪个文件

要查看哪个文件是最新的,而不通过电子邮件发送它,请运行:

inode=$(find /xx/xx/logs/xx/ -maxdepth 1 -type f -iname '*.log' -printf '%T@ %i\n' | sort -rn | awk '{print $2;exit;}')
newest=$(find /xx/xx/logs/xx/ -maxdepth 1 -inum "$inode")
echo "newest file is $newest"

相关内容