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でこのコマンドを実行する場合は、%escapesを使用する必要があります\[ $(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

関連情報