获取Bash当前目录中的可用空间


25

我知道df -hpwd,但是正则表达式匹配部分似乎有点复杂。有任何想法吗?


1
你是说du -h
jweyrich 2011年

Answers:


45

通过使用该-P选项,可以确保输出更易于解析:

  1. 有关每个文件系统的信息始终仅打印在一行上。挂载设备永远不会自己挂在一条线上。这意味着,如果安装设备名称的长度超过20个字符(例如,对于某些网络安装),则这些列将对齐。

这使得获得可用空间变得更加容易:

$ df -Ph . | tail -1 | awk '{print $4}'

-h使用兆字节,千兆字节等。如果您的系统没有,则-k仅用于千字节。)

如果传递df路径,它将仅返回两行:标题行,然后返回包含该路径的文件系统的数据。我们可以使用tail来仅抓住第二行。我们知道可用空间在第4列中,因此我们使用来抓住它awk。这一切都可以用awk

$ df -Ph . | awk 'NR==2 {print $4}'

或许多其他的过滤器


您可以通过使用环境变量$PWD而不是使用命令替换并不需要尾巴来优化命令: df -Ph $PWD | awk 'NR==2{print $4}'
SiegeX 2011年

@SiegeX:我同意这样做会awk更好。我加入了更长的命令,因为我想举一个例子,说明如何构造一系列简单的命令来执行更复杂的事情。我已经更新了答案,以包括您的改进。
史蒂文D

-P是标准的(P用于POSIX)。但是-h是GNU扩展(也存在于其他一些系统上,但是例如在OpenBSD上,它与不兼容-P)。
吉尔(Gilles)“所以,别再邪恶了”,

您可以使用--output = avail开关执行此操作,而无需退出: df -h --output=avail . | tail -1
Floyd

“您可以优化命令”。并不是的。将两个管道都运行10'000次(如所示 time { I=0; while [ $I -lt 10000 ]; do df -Ph . | awk 'NR==2 {print $4}' > /dev/null; ((I++)); done })不会显示出有意义的速度差异,这并不令人惊讶-调用tail并不昂贵,并且awk可以省去跳到输入的结尾...可能存在差异PDP-11 ...
David Tonhofer

10

怎么做df -h .。这将为您提供当前工作目录所在分区的可用空间。

一个小例子:

 /usr/local/nagios/libexec # df -h .
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/mapper/vg00-lvol1
                       9.9G  6.1G  3.4G  65% /

4

以字节为单位:

df --output=avail -B 1 "$PWD" | tail -n 1

可读性:

df --output=avail -h "$PWD" | tail -n 1

要么

df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --to="iec"

要么

df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --grouping
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.