Как проверить, больше ли размер файла или каталога, чем значение в bash? - PullRequest
1 голос
/ 03 апреля 2019

Я хочу написать короткий скрипт резервного копирования на bash, который позволит мне выбрать каталог, который я хочу сохранить, а затем сжать его.Я сделал это.

Далее я хотел сделать это так, чтобы я мог сравнивать размер файлов, которые должны быть скопированы.Я использовал du -b /example/directory | cut -f1.Это дало мне размеры папок в этом каталоге, без их имен.Но я не могу сравнить его со значением, используя оператор if, потому что это не целочисленный оператор.

Пока это мой код.

#!/bin/bash
#Which folders to backup
backup_files="/home"

#Where to save
dest="/home/student"

#Check size of each folder
file_size=$(du -b /example/directory | cut -f1)

#Size limit
check_size=1000

#Archive name
day=$(date +%A)
hostname=$(hostname -s)
archive_file="$hostname-$day.tar.gz"

#Here's the problem I have
if [ "$file_size" -le "$check_size" ]; then
    tar -vczf /$dest/$archive_file $backup_files
fi

echo "Backup finished"

1 Ответ

1 голос
/ 03 апреля 2019

Добавьте параметр -s (суммирование) к вашему du. Без этого вы возвращаете размеры каждого подкаталога, что делает ваше окончательное сравнение размеров неудачным.

Изменение:

file_size=$(du -b /example/directory | cut -f1)

до:

file_size=$(du -bs /example/directory | cut -f1)

Если вы хотите проверить каждый отдельный объект, сделайте что-то вроде:

du -b /example/directory |
    while read size name
    do
        if [ "$size" -le "$limit" ]; then
            # do something...
        else
            # do something else - object too big...
        fi       
    done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...