Bash Script, найдите размер файла и сравните его, не запущенный [дубликат]

0
20.05.2017, 00:52
3 ответа

Вы можете использовать команду 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 - формат, представляющий общий размер в байтах

0
28.01.2020, 04:45

Скрипт? Вот однострочник:

[ $(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
0
28.01.2020, 04:45

В тесте нужно несколько пробелов:

if [ $f -lt 60000000000 ] ;then
    echo "Hello"
fi
0
28.01.2020, 04:45

Теги

Похожие вопросы