Вы можете использовать команду 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
- формат, представляющий общий размер в байтах
Скрипт? Вот однострочник:
[ $(stat -c %s $(ls -tr /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz | tail -n 1)) -lt 60000000000 ] && echo "Error" | mail -s "Too small" root@example.org
ls -tr /var/lib/xxxxxx/backups/xxxxxxxxDB*.gz
перечислит все файлы в обратном порядке по отметке времени. Последний самый новый. tail -n 1
покажет последний файл. $(..)
— текст команды. stat -c %s
покажет размер файла. [ ... ]
на самом деле является командой /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" root@example.org
fi
В тесте нужно несколько пробелов:
if [ $f -lt 60000000000 ] ;then
echo "Hello"
fi