检查Bash中的文件夹大小


316

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

# 10GB
SIZE="1074747474"

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

1
如果您想对其进行排序:serverfault.com/questions/62411/…–
cregox


由于这是一个很普遍的问题-如果有任何初学者遇到此问题的答案,并想了解更多有关到底du是什么以及每个人如何知道所有这些命令的信息:您可以man du在终端中键入以在手册中查找du命令。这将显示一个您可以查看的输出,并将汇总所有建议使用的标志,例如-h,-c,-s,-b,-B,-apparent-size等。然后,您可以自己决定如何最好地du用于特定用例。
Josh Desmond

Answers:


608

你可以做:

du -h your_directory

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

如果要简短输出,那就du -hcs your_directory很好。


15
尝试获取脚本值时,您不需要人类可读的数字。
稻谷

4
没有指定目录路径,它将默认为当前工作目录。所以du -hs== du -hs .
razz 2015年

8
还要检查一下:du | sort -n它将按目录大小对目录进行排序
optimiertes

3
du -hcs dir_name/*包括子文件夹
优化

du -h <dir> | 尾巴-1?
亚历山大·米尔斯

143

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

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

我知道已经过去两年了,但是您是否愿意在条件说明中稍微解释一下regex和BASH_REMATCH的目的是什么?(或者提供一些有关这些变量/命令/格式的用法的链接)我希望代码仅获取变量中文件的大小,然后直接与10 gb进行比较,这还有哪些其他作用?
Nordico '16

2
@Nordico是的。不需要正则表达式和BASH_REMATCH,所以我更新了答案。
Taxellool '16

29

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

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

1
我是Shell脚本新手。du命令的输出包括目录名称。我无法只得到数字部分。“切”在您的答案中解开了谜团!
simpleDev

26

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

du --max-depth=0 ./directory

输出看起来像

5234232       ./directory

5
--max-depth对于有效控制输出非常有用!例如,要了解目录中发生的事情:du -h --max-depth=1
matanster


12

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

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

1
在os x上,这些标志-g用于1 GB和-m1 MB计数。通过man du
Sgnl

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

4

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

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

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


这是一个很好的答案
d8aninja
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.