用于计算磁盘大小特定百分比的 Shell 命令

用于计算磁盘大小特定百分比的 Shell 命令

我正在编写 shell 脚本来计算用户主目录总磁盘大小的 15%。我有这个命令,它(某种程度上)可以让我得到我想要的东西,但不确定是否有更好的方法来实现这一点。

df -hT /home/user1 | grep -vE '^Filesystem' | awk '{ print $2 }'

该命令输出:

<blank line>

516G

我的问题是,如何提取 516,这个命令是否是正确的方法。

答案1

不使用 grep 的另一种方法是awk

df -hT /home/user | awk '$1 ~ "sda1"{gsub(/[A-Z]/,"",$4); print $4}'

awk 块前面的测试$1~"sda1"只是检查您的主硬盘是否是df正在查看的硬盘。这比抓取df不包含以下内容的记录要安全得多filesystem,如果您将另一个驱动器放入盒子中或安装一些 NFS 驱动器,则可能吐出不仅仅是您的主驱动器的内容。

gsub(/[A-Z]/, "", $4)$4只需将(驱动器大小)中的任何大写字母替换为空""即可。这应该足够了,因为我相信所有磁盘大小后缀 (K、M、G 等) 都是大写字母。完成后,我们打印新的和改进的$4

答案2

  • $2+0使其成为 中的数字awk
  • 您不需要这样做,grep因为您可以自行执行搜索awk

您可以使用:

df -hT / |  awk '/^Filesystem/{ print ($2+0) * 15/100 }'

答案3

我建议你不要尝试删除“G”,而是指定块大小。这将确保你不必处理返回类似以下内容的复杂情况或者

df -BG /home/user1 | awk 'NR==2 { print $3 * 0.15 }'

也许使用 -B1 更好,然后手动执行可打印的版本:

df -B1 /home/user1 | awk 'NR==2 { split("K M G T P E", s); for(n=int($3*0.15); n>1024; n=rshift(n,10)) i++; print n s[i] }'

以上内容适用于(GNU coreutils)8.12 和 8.25 版本df

输出df提供了有关给定目录使用的分区的信息...如果您的每个用户都拥有自己的分区,那么这可能会很有效。但是,在大型组织中,尤其是在您的用户目录中更有可能使用该分区。如果是这种情况,quota请查阅(和朋友)man的页面。quota

相关内容