在Bash中检查文件夹大小

tom*_*tom 283 directory bash shell

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

# 10GB
SIZE="1074747474"

# check the current size
CHECK="`du /data/sflow_log/`"
if [ "$CHECK" -gt "$SIZE" ]; then
  echo "DONE"
fi
Run Code Online (Sandbox Code Playgroud)

Min*_*gyu 564

你可以做:

du -h your_directory
Run Code Online (Sandbox Code Playgroud)

这将为您提供目标目录的大小.

如果你想要一个简短的输出,du -hcs your_directory很好.

  • 当您尝试获取脚本的值时,您不需要人类可读的数字. (13认同)
  • 还可以看看:`du | sort -n`它将按其大小对目录进行排序 (6认同)
  • 如果未指定目录路径,则默认为当前工作目录.所以`du -hs` ==`du -hs .`. (4认同)
  • du -hcs dir_name / *包含子文件夹 (2认同)
  • 用于磁盘使用的`du`和用于"人类可读"的`-h` (2认同)

Tax*_*ool 134

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

du -hs /path/to/directory
Run Code Online (Sandbox Code Playgroud)

更新:

您应该知道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
Run Code Online (Sandbox Code Playgroud)

当然,-h脚本中不需要(人类可读)选项.

相反,您可以使用-b更简单的内部比较.

但是你应该注意它本身-b适用--apparent-size.它可能不是你需要的.

-b, --bytes
      equivalent to '--apparent-size --block-size=1'
Run Code Online (Sandbox Code Playgroud)

所以我想,你应该使用--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
Run Code Online (Sandbox Code Playgroud)

  • @Nordico是的.没有正则表达式和BASH_REMATCH所以我更新了答案. (2认同)

pad*_*ddy 26

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

CHECK=$(du -sb /data/sflow_log | cut -f1)
Run Code Online (Sandbox Code Playgroud)

  • 我是 shell 脚本的新手。du 命令的输出包括目录名称。我无法仅获得数字部分。您的回答中的“剪切”解决了这个谜! (4认同)

sil*_*tar 24

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

du --max-depth=0 ./directory
Run Code Online (Sandbox Code Playgroud)

输出看起来像

5234232       ./directory
Run Code Online (Sandbox Code Playgroud)

  • 添加-h使其更具人性化 (11认同)
  • `--max-depth`对于有效控制输出非常有用!例如,要了解目录中正在发生的事情:`du -h --max-depth = 1` (3认同)

小智 11

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

$du -s --block-size=M /path/to/your/directory/
Run Code Online (Sandbox Code Playgroud)

  • 在 os x 上,标志为 `-g` 表示 1-Gbyte 和 `-m` 表示 1-Mbyte 计数。通过`man du` (2认同)

Mic*_*ein 8

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

du -h --max-depth=1

  • 在某些系统上,“--max-depth=1”标志不能与“du”命令一起使用。因此,您可以使用“-d1”来实现相同的行为。例如:`du -h -d2 "$HOME"` (5认同)
  • 或Android上的`du -h -d 1`。 (4认同)
  • 和OSX上的`du -h -d 1` (2认同)

Gut*_*ilz 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
Run Code Online (Sandbox Code Playgroud)


Vig*_*aja 5

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

function dsize()
{
    dir=$(pwd)
    if [ -n "$1" ]; then
            dir=$1
    fi
    du -hs "$dir"
}
Run Code Online (Sandbox Code Playgroud)

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