我试图写一个脚本,将计算一个目录大小,如果大小小于10GB,然后大于2GB做一些操作。我需要在哪里提到我的文件夹名称?
# 10GB
SIZE="1074747474"
# check the current size
CHECK="`du /data/sflow_log/`"
if [ "$CHECK" -gt "$SIZE" ]; then
echo "DONE"
fi
我试图写一个脚本,将计算一个目录大小,如果大小小于10GB,然后大于2GB做一些操作。我需要在哪里提到我的文件夹名称?
# 10GB
SIZE="1074747474"
# check the current size
CHECK="`du /data/sflow_log/`"
if [ "$CHECK" -gt "$SIZE" ]; then
echo "DONE"
fi
当前回答
使用summary (-s)和bytes (-b)。您可以使用cut来切割摘要的第一个字段。把它们放在一起:
CHECK=$(du -sb /data/sflow_log | cut -f1)
其他回答
你可以:
du -hs your_directory
这将为您提供目标目录大小的简要输出。使用*这样的通配符可以选择多个目录。
如果你想要一个目标中所有文件和子目录大小的完整列表,你可以这样做:
du -h your_directory
小贴士:
添加参数-c以查看末尾的Total行。例如du -hcs或du -hc。 删除参数-h以查看精确的KiB格式的大小,而不是人类可读的MiB或GiB格式。例如du -s或du -cs。
如果有帮助,您还可以在.bashrc或.bash_profile中创建别名。
function dsize()
{
dir=$(pwd)
if [ "$1" != "" ]; then
dir=$1
fi
echo $(du -hs $dir)
}
这将打印当前目录或已作为参数传递的目录的大小。
使用summary (-s)和bytes (-b)。您可以使用cut来切割摘要的第一个字段。把它们放在一起:
CHECK=$(du -sb /data/sflow_log | cut -f1)
如果你只是想查看文件夹大小,而不是子文件夹,你可以使用:
du -hs /path/to/directory
更新:
你应该知道du显示的是已使用的磁盘空间;而不是文件大小。
如果你想查看实际文件大小的总和,你可以使用——-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单独应用——-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
如果您只想查看文件夹的聚合大小,可能是MB或GB格式,请尝试下面的脚本
$du -s --block-size=M /path/to/your/directory/