运行查找命令和电子邮件结果

时间:2015-09-04 10:49:42

标签: linux bash email sendmail

我想使用find命令获取早于8640分钟的文件,并将结果发送到电子邮件正文中。我使用这个脚本来使用包含find命令结果的文件--ATTACH_FILE:

#!/bin/sh
ATTACH_FILE="/pub/email_attach.txt"
WORK_DIR="/pub/"
rm -f $ATTACH_FILE
find $WORK_DIR -maxdepth 1 -name '*x.rsd' -type f -daystart -mmin +8640 -exec echo {} >> $ATTACH_FILE \;

if [ ! -z $ATTACH_FILE ]; then
    FILESIZE=$(stat -c%s "$ATTACH_FILE" 2>> getLatestErr.log)
    echo $ATTACH_FILE "size $FILESIZE bytes"
    if [ $FILESIZE -gt 0 ]; then
       cat $ATTACH_FILE | mail -s "Test "$TODAY mmm@server.com
    fi
fi

如何在不使用辅助文件ATTACH_FILE的情况下将消息放入电子邮件正文中,从而获得相同的结果?

2 个答案:

答案 0 :(得分:2)

您可以使用-e选项mail。这告诉它如果输入为空则不要做任何事情。

find $WORK_DIR -maxdepth 1 -name '*x.rsd' -type f -daystart -mmin +8640 -print | mail -e -s "Test "$TODAY mmm@server.com

答案 1 :(得分:1)

扩展我的评论:

分配给数组变量并使用printf将找到的项目与换行符分开:

#!/bin/bash
WORK_DIR="/pub/"

FILE_LIST=($(find $WORK_DIR -maxdepth 1 \
    -name '*x.rsd' -type f \
    -daystart -mmin +8640 ))

if [ -n "${FILE_LIST[0]}" ]; then
   printf '%s\n' "${FILE_LIST[@]}" | mail -s "Test "$TODAY mmm@server.com
fi

我与/bin/sh交换/bin/bash,因为问题标有[bash]