Linux 运行find命令并通过电子邮件发送结果

Linux 运行find命令并通过电子邮件发送结果,linux,bash,email,sendmail,Linux,Bash,Email,Sendmail,我想使用find命令来获取超过8640分钟的文件,并将结果发送到电子邮件正文中。我使用了这个脚本,它使用了一个文件-ATTACH_file-包含find命令的结果: #!/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 {}

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

#!/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的情况下将邮件放入邮件正文中获得相同的结果?

您可以使用
-e
选项发送
邮件
。这告诉它,如果输入为空,就不要执行任何操作

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

您可以使用
-e
选项发送
邮件
。这告诉它,如果输入为空,就不要执行任何操作

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

要进一步阐述我的上述评论:

分配给数组变量并使用
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]

以扩展我的上述评论:

分配给数组变量并使用
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]

在变量中捕获查找输出:
文件列表=$(查找…
,无输出重定向;使用
FILELIST
替换剩余代码中的
ATTACH_FILE
,删除处理该文件的行。将文件大小计算替换为
if[-n“${FILELIST}”];然后
@Tom Regner谢谢你的回复。如果我使用FILE_LIST=$(find$WORK_DIR-maxdepth 1-name'*x.rsd'-type f-daystart-mmin+8640);我将所有项目都放在一行中,如file1 file2。。。。如何将它们分成几行?您是否使用了提供的解决方案之一?还有其他问题吗?一点反馈很好:)在变量中捕获find输出:
FILELIST=$(find…
,无输出重定向;使用
FILELIST
替换剩余代码中的
ATTACH_FILE
,删除处理该文件的行。将文件大小计算替换为
if[-n“${FILELIST}”];然后
@Tom Regner谢谢你的回复。如果我使用FILE_LIST=$(find$WORK_DIR-maxdepth 1-name'*x.rsd'-type f-daystart-mmin+8640);我将所有项目都放在一行中,如file1 file2。。。。如何将它们分成几行?您是否使用了提供的解决方案之一?还有其他问题吗?一点反馈很好:)