Bash 脚本,查找文件大小并比较未运行

Bash 脚本,查找文件大小并比较未运行

正如您将在下面的代码中看到的那样,对于 bash 来说非常陌生。

我想获取文件的文件大小(以字节为单位),将其与固定值进行比较,如果后者太小则发送电子邮件。

代码:

#!/bin/bash
f=$(find /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz -ctime 0 -print -exec ls -l {} \; | awk '{print $5}')

if [$f -lt 60000000000] ; then
echo "hello";
fi

上面命令的输出是18607414901字节,即18gb。

我想要的是如果小于 60gb 则执行命令。该echo命令仅用于测试。

./backupsql.sh: line 4: [: missing `]'

答案1

您在测试中需要一些空格:

if [ $f -lt 60000000000 ] ;then
    echo "Hello"
fi

答案2

您可以使用wc带有选项的命令-c打印字节数) 获取文件大小(以字节为单位)以进行进一步比较:

#!/bin/bash

s=$(wc -c < /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz)
if [ $s -lt 60000000000 ]; then
echo "hello"
fi

另一种方法是使用带选项stat的命令-c

#!/bin/bash

s=$(stat -c "%s" /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz)
if [ $s -lt 60000000000 ]; then
echo "hello"
fi

-c- 告诉使用指定的格式

%s- 表示总大小的格式,以字节为单位

答案3

脚本?这是一句:

[ $(stat -c %s $(ls -tr /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz | tail -n 1)) -lt 60000000000 ] && echo "Error" | mail -s "Too small" [email protected]

ls -tr /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz将按时间戳倒序列出所有文件。最后一张是最新的。tail -n 1将显示最后一个文件。$(..)是命令的文本。stat -c %s <file>将显示文件的大小。[ ... ]实际上是命令 /usr/bin/test 如果返回代码是0它将运行之后的命令&&

如果您在 crontab 中运行此命令,则必须%使用转义\,例如[ $(stat -c \%s ..

脚本版本:

#! /bin/bash
LASTFILE=$(ls -tr /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz | tail -n 1)
if [ $(stat -c %s $LASTFILE) -lt 60000000000 ]; then
  echo "$LASTFILE" | mail -s "Too small" [email protected]
fi

相关内容