如何在Bash中获取当前可用的磁盘空间?

7

我正在进行一些常常会消耗我的磁盘空间的操作。因此,当磁盘空间低于2GB时,我希望计算机能够发出声音警告。我知道可以通过运行df -h命令来获取剩余磁盘空间的输出列表:

Filesystem                                      Size   Used  Avail Capacity   iused     ifree %iused  Mounted on
/dev/disk1                                     112Gi  100Gi   12Gi    90%  26291472   3038975   90%   /
devfs                                          191Ki  191Ki    0Bi   100%       663         0  100%   /dev
map -hosts                                       0Bi    0Bi    0Bi   100%         0         0  100%   /net
map auto_home                                    0Bi    0Bi    0Bi   100%         0         0  100%   /home

但我无法在if-then语句中使用此输出,以便在可用空间低于2GB时播放声音。

有人知道如何仅获取可用空间而不是整个输出吗?

3个回答

9

这是我能够获取可用磁盘空间数量的唯一便携式方法(适用于Linux和Mac OS):

df -Pk . | sed 1d | grep -v used | awk '{ print $4 "\t" }'

请注意,Linux的df与Mac OS(OS X)的df不同,并且它们仅共享有限数量的选项。
此命令返回以千字节为单位的可用磁盘空间。不要尝试使用其他度量单位,因为这些选项不可移植。

4

首先,可用的磁盘空间取决于您所使用的分区/文件系统。以下命令将打印当前文件夹中的可用磁盘空间:

TARGET_PATH="."
df -h "$TARGET_PATH"  | awk 'NR==2{print $4}'

TARGET_PATH 是您要写入的文件夹。 df 会自动检测该文件夹所属的文件系统。


3
去除df选项中的-h有助于此处:df . | awk 'NR==2{if($4<=2*1024*1024) print "可用空间 < 2 GB\a"}' - anishsane
哦,是的。我没有看到“> 2GB”的限制。 - hek2mgl
1
甚至可以使用 $ df --output=avail . | awk 'NR==2 && $0 <= 2 * 2**20 { print "可用空间小于等于2GB\a" }' - Dmitry Alexandrov

-1
#!/bin/bash
Check_space() { 
    set -e
    cd
    Home=$PWD
    reqSpace=100000000
    SPACE= df "$Home"
    if [[ $SPACE -le reqSpace ]]
    then
    $SPACE
    echo "Free space on  " 
    fi
}
Check_space

虽然这段代码可能回答了问题,但提供关于它是如何解决问题的方式和/或原因的额外上下文会提高答案的长期价值。 - Klaus Gütter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接