401

我正在尝试编写一个脚本来计算目录大小,如果大小小于 10GB,大于 2GB,则执行一些操作。我需要在哪里提及我的文件夹名称?

# 10GB
SIZE="1074747474"

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

8 回答 8

770

你可以做:

du -hs your_directory

这将为您提供目标目录大小的简要输出。使用通配符like*可以选择多个目录。

如果您想要目标内所有文件和子目录的完整大小列表,您可以执行以下操作:

du -h your_directory

提示:

  • 添加参数以在末尾-c查看Total行。示例:du -hcsdu -hc

  • 删除参数-h以查看精确 KiB 的大小,而不是人类可读的 MiB 或 GiB 格式。示例:du -sdu -cs

于 2013-05-21T04:12:55.107 回答
163

如果您只想查看文件夹大小而不是子文件夹,可以使用:

du -hs /path/to/directory

更新:

您应该知道du显示已用磁盘空间;而不是文件大小。

--apparent-size如果您想查看实际文件大小的总和,您可以使用。

--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(人类可读)选项。

相反,您可以-b在脚本中使用更轻松的比较。

但是您应该注意,它本身-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
于 2014-03-10T08:20:19.033 回答
40

使用摘要 ( -s) 和字节 ( -b)。您可以使用 剪切摘要的第一个字段cut。把它们放在一起:

CHECK=$(du -sb /data/sflow_log | cut -f1)
于 2013-05-21T04:14:05.177 回答
34

要获取目录的大小,仅此而已:

du --max-depth=0 ./directory

输出看起来像

5234232       ./directory
于 2015-01-23T03:42:40.803 回答
30

要检查目录中所有目录的大小,可以使用:

du -h --max-depth=1
于 2018-10-18T16:59:50.230 回答
14

如果您只想查看文件夹的总大小并且可能是 MB 或 GB 格式,请尝试以下脚本

$du -s --block-size=M /path/to/your/directory/
于 2014-06-20T14:32:36.977 回答
5
# 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
于 2016-01-31T13:25:57.893 回答
4

如果有帮助,您还可以在.bashrc或中创建别名.bash_profile

function dsize()
{
    dir=$(pwd)
    if [ "$1" != "" ]; then
            dir=$1
    fi
    echo $(du -hs $dir)
}

这将打印当前目录或您作为参数传递的目录的大小。

于 2018-06-13T09:59:26.937 回答