我正在尝试编写一个脚本来计算目录大小,如果大小小于 10GB,大于 2GB,则执行一些操作。我需要在哪里提及我的文件夹名称?
# 10GB
SIZE="1074747474"
# check the current size
CHECK="`du /data/sflow_log/`"
if [ "$CHECK" -gt "$SIZE" ]; then
echo "DONE"
fi
du
到底是什么以及每个人如何知道所有这些命令的信息:您可以在终端中键入 man du
以查找手册中的 du 命令。这将显示一个您可以查看的输出,并将总结您建议使用的答案的所有标志,例如 -h、-c、-s、-b、-B、--apparent-size 等。然后,您可以自行决定如何将 du
用于您的特定用例。
你可以做:
du -hs your_directory
这将为您提供目标目录大小的简要输出。使用像 *
这样的通配符可以选择多个目录。
如果您想要目标内所有文件和子目录的完整大小列表,您可以执行以下操作:
du -h your_directory
提示:
添加参数 -c 以在末尾查看 Total 行。示例:du -hcs 或 du -hc。
删除参数 -h 以查看精确 KiB 的大小,而不是人类可读的 MiB 或 GiB 格式。示例:du -s 或 du -cs。
如果您只想查看文件夹大小而不是子文件夹,可以使用:
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
使用摘要 (-s
) 和字节 (-b
)。您可以使用 cut
剪切摘要的第一个字段。把它们放在一起:
CHECK=$(du -sb /data/sflow_log | cut -f1)
要获取目录的大小,仅此而已:
du --max-depth=0 ./directory
输出看起来像
5234232 ./directory
--max-depth
对于有效控制输出非常有用!例如,要很好地了解目录中发生的事情:du -h --max-depth=1
要检查目录中所有目录的大小,可以使用:
du -h --max-depth=1
如果您只想查看文件夹的总大小并且可能是 MB 或 GB 格式,请尝试以下脚本
$du -s --block-size=M /path/to/your/directory/
-g
用于 1-Gbyte 和 -m
用于 1-Mbyte 计数。通过man du
# 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
如果有帮助,您还可以在 .bashrc
或 .bash_profile
中创建别名。
function dsize()
{
dir=$(pwd)
if [ "$1" != "" ]; then
dir=$1
fi
echo $(du -hs $dir)
}
这将打印当前目录或您作为参数传递的目录的大小。
$dir
传递给 du
时引用它,以防止对 $dir
的值进行分词。将对 du
的调用包装到 echo $(…)
中似乎是多余的。您可以使用内置的 Bash 变量 ${PWD}
,而不是调用 pwd
。为了检查是否设置了变量,我建议使用 [ -v varname ]
。
du -hs
==du -hs .
。du | sort -n
它将按目录大小对目录进行排序du -hcs dir_name/*
包括子文件夹