当它检测到某种类型的文件(以“.gz”结尾的文件)(上次修改时间为 24 小时前)低于目录中的特定大小时,我试图使此 bash 脚本调度和发送电子邮件,我目前让它在我的整台计算机上运行。 (我将其设置为 10 KB)。
不管怎样,它只是发送一封电子邮件,我希望它只在实际检测到该文件低于阈值时才发送一封电子邮件,如果有人可以检查一下它并尝试告诉我哪里搞砸了,那就太好了!这是我的第一个严肃的剧本之一,所以词汇量要少一些!
1) 该脚本将查找目录中以“.gz”结尾且在过去 24 小时内修改过的所有文件。
2) 它将检查这些文件并确保它们的大小超过特定阈值(例如 10 KB)
3) 如果是,则不会执行任何操作,但如果低于该阈值,则会向上述电子邮件地址发送一封电子邮件
#!/bin/bash
for file in /*; do
stat $file
FAILURE= find . -name "*.gz" -size -10k -mtime -1 -printf 'Failure %p\n'
done
if $FAILURE
then
echo "The backup test has failed!" | mail -s "BACKUP FAILURE" [email protected]
fi
答案1
这是您的脚本稍作修改:
#!/bin/bash
if files=$(find . -name "*.gz" -size -10k -mtime -1 -print) ; then
echo "The backup test has failed!\n$files" | mail -s "BACKUP FAILURE" [email protected]
fi
您不需要将其放入 for 循环中;有一个隐式循环寻找命令。
如果您还没有弄清楚这一点,可以使用的一种调试技术是运行上面的部分命令来测试它们。
不过也有一个bash 调试器。
答案2
我假设您想检查此文件夹 /usr/test 中是否有小 gz 文件,以下内容应该对您有帮助。它会向您发送此路径下所有 gz 文件的日志文件,并通过电子邮件将列表发送给您。您可以使用此列表供以后使用。
我的脚本是:
#!/bin/bash
size_checker ()
{
cd /usr/test
ls *.gz > gzfiles
for FILE in `cat gzfiles`
do
SIZE=`ls -la $FILE | awk '{print $5}'`
if [ "$SIZE" -lt 10241 ]
then
LAST_MODIFIED=`ls -la $FILE | awk '{print $6,$7}'`
echo "${FILE} ${LAST_MODIFIED}" >> log
if
done
uuencode log log.txt | mailx -s "Log of small gz files" [email protected]
}
size_checker
exit 0
添加修改时间,您将收到所有小于或等于10kb的gz文件及其最后修改日期。