shell 在Bash中检查文件夹大小

ahy6op9u  于 2023-02-24  发布在  Shell
关注(0)|答案(8)|浏览(252)

我正在尝试写一个脚本,将计算目录大小,如果大小小于10GB,大于2GB做一些动作。我需要在哪里提到我的文件夹名称?

# 10GB
SIZE="1074747474"

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

slsn1g291#

您可以:

du -hs your_directory

这将给你一个目标目录大小的简要输出。使用通配符如*可以选择多个目录。
如果要完整列出目标中所有文件和子目录的大小,可以执行以下操作:

du -h your_directory
    • 提示:**
  • 添加参数-c以在末尾看到 * Total * 行。示例:du -hcsdu -hc
  • 删除参数-h以查看精确KiB格式的大小,而不是可读的MiB或GiB格式。du -sdu -cs
dzjeubhm

dzjeubhm2#

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

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
jum4pzuy

jum4pzuy3#

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

du -h --max-depth=1
pxq42qpu

pxq42qpu4#

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

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

zf9nrax15#

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

du --max-depth=0 ./directory

输出如下所示

5234232       ./directory
vaqhlq81

vaqhlq816#

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

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

dluptydi7#

# 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
vcirk6k6

vcirk6k68#

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

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

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

相关问题