运行 查找命令和电子邮件结果
run find command and email results
我想使用查找命令来获取早于 8640 分钟的文件并将结果发送到电子邮件正文中。我使用了这个利用文件的脚本 - 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 的情况下通过将消息放入电子邮件正文来获得相同的结果?
您可以使用 -e
选项来 mail
。这告诉它如果输入为空则不执行任何操作。
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/bash
交换了 /bin/sh
,因为问题被标记为 [bash]
。
我想使用查找命令来获取早于 8640 分钟的文件并将结果发送到电子邮件正文中。我使用了这个利用文件的脚本 - 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 的情况下通过将消息放入电子邮件正文来获得相同的结果?
您可以使用 -e
选项来 mail
。这告诉它如果输入为空则不执行任何操作。
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/bash
交换了 /bin/sh
,因为问题被标记为 [bash]
。