Проверьте размер папки в Bash

Я пытаюсь написать script, который рассчитает размер каталога и размер меньше 10 ГБ, а больше 2 ГБ предпримут какое-то действие. Где мне нужно указать имя моей папки?

# 10GB
SIZE="1074747474"

# check the current size
CHECK="`du /data/sflow_log/`"
if [ "$CHECK" -gt "$SIZE" ]; then
  echo "DONE"
fi

Ответ 1

Вы можете сделать:

du -h your_directory

который даст вам размер вашего целевого каталога.

Если вам нужен короткий вывод, du -hcs your_directory будет приятным.

Ответ 2

если вы просто хотите увидеть размер папки, а не подпапки, вы можете использовать:

du -hs /path/to/directory

Update:

Вы должны знать, что du показывает используемое дисковое пространство; а не размер файла.

Вы можете использовать --apparent-size, если u хочет видеть сумму фактических размеров файлов.

--apparent-size
      print  apparent  sizes,  rather  than  disk  usage; although the apparent size is usually smaller, it may be larger due to holes in ('sparse')
      files, internal fragmentation, indirect blocks, and the like

И, конечно, нет необходимости в -h (удобочитаемый) вариант внутри script.

Вместо этого вы можете использовать -b для упрощения сравнения внутри script.

Но вы должны отметить, что -b применяет --apparent-size самостоятельно. И это может быть не то, что вам нужно.

-b, --bytes
      equivalent to '--apparent-size --block-size=1'

поэтому я думаю, вы должны использовать --block-size или -b

#!/bin/bash
SIZE=$(du -B 1 /path/to/directory | cut -f 1 -d "   ")    
# 2GB = 2147483648 bytes
# 10GB = 10737418240 bytes
if [[ $SIZE -gt 2147483648 && $SIZE -lt 10737418240 ]]; then
    echo 'Condition returned True'
fi

Ответ 3

Используйте сводку (-s) и байты (-b). Вы можете вырезать первое поле сводки с помощью cut. Объединяя все это:

CHECK=$(du -sb /data/sflow_log | cut -f1)

Ответ 4

Чтобы просто получить размер каталога, ничего более:

du --max-depth=0 ./directory

вывод выглядит как

5234232       ./directory

Ответ 5

если вы просто хотите видеть общий размер папки и, вероятно, в формате MB или GB, попробуйте ниже script

$du -s --block-size=M /path/to/your/directory/

Ответ 6

# 10GB
SIZE="10"


# check the current size
CHECK="`du -hs /media/662499e1-b699-19ad-57b3-acb127aa5a2b/Aufnahmen`"
CHECK=${CHECK%G*}
echo "Current Foldersize: $CHECK GB"

if (( $(echo "$CHECK > $SIZE" |bc -l) )); then
        echo "Folder is bigger than $SIZE GB"
else
        echo "Folder is smaller than $SIZE GB"
fi