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

相關內容