用于检测文件大小是否正确的 Bash 脚本

用于检测文件大小是否正确的 Bash 脚本

当它检测到某种类型的文件(以“.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文件及其最后修改日期。

相关内容