1

好的,所以我正在编写一个 shell 脚本,如果可用空间不足,则需要删除文件,但是我不知道如何以考虑配额的方式检索剩余空间(如果已设置)。

例如,我可以使用 df 命令,但这似乎只检索文件系统的实际块使用情况,因此它会报告整个卷的总可用空间,即使用户的配额会阻止脚本使用那么多空间。

是否有我可以使用的命令来检索当前用户配额或卷的可用空间(以较低者为准)剩余的最小可用空间?

[编辑] 好的,所以看起来配额命令可以让我获得我需要的信息,我现在遇到的问题是从中获取有用的数据以获取所有可能的返回值。当在没有设置配额的情况下调用它时,它只会返回“none”,这意味着我需要深入研究 df 来获取大小。

任何人都可以帮助查询配额然后 df(如果需要)以获取当前使用情况和最大块大小(通过配额或卷,以最低/设置为准),以便我可以计算剩余空间量吗?

4

2 回答 2

0

您可以使用以下命令查找文件系统的占用情况,试一次看看。

df -k /*somedirectoryname

希望这可以帮助。

于 2013-04-17T16:55:11.927 回答
0

这是我最后想出的脚本;它应该相当可靠地返回文件系统的剩余空间(以字节为单位)或同一文件系统的用户剩余配额。查找正确的 /dev/foo 路径以供使用的quota过程并不像我想要的那样快速。

#!/bin/sh
freespace_remaining() {
    # Get remaining space on file-system
    fs=$(df -k "$1" | tail -1)
    free=$(echo "$fs" | awk '{ print $4 }')
    let 'free *= 1024'

    # Determine the device for the file-system
    device=
    mnt=$(echo "$fs" | awk '{ print $6 }')
    if [ "$cached_mnt" != "$mnt" ] 
        then
            cached_mnt="$mnt"

            mnts=$(mount)
            newmnt="$mnt"

            # Try to get a root mount point (for encrypted folders etc.)
            while [ -n "$newmnt" ] 
            do
                newmnt=$(echo "$mnts" | grep " on $mnt " | awk '{ print $1 }')
                [ "$newmnt" = "$mnt" ] && break

                if [ -n "$newmnt" ] 
                    then
                        device="$newmnt"
                        mnt=$(df "$newmnt" 2> /dev/null | tail -1 | awk '{print $6 }')

                        [ "$mnt" = "$device" -o "$mnt" = "$last" ] && break
                        last="$mnt"
                fi
            done

            cached_device="$device"
    fi

    # Lookup the user's quota for the target device (if any is set)
    quota=$(quota | grep "[\s]*$device")

    # Return the lower of the two values as remaining space
    if [ -n "$quota" ]
        then
            quota=$(echo "$quota" | awk '{ print $3 }')
            used=$(echo "$quota" | awk '{ print $2 }')

            let 'quota=(quota - used) * 1024'
            [ "$quota" -lt "$free" ] && free="$quota"
    fi
    echo "$free"
}

freespace_remaining "$1"

希望它是如何工作的足够清楚,只需传入一个路径作为第一个(也是唯一一个)参数,它会返回剩余的可用空间,同时考虑当前用户的配额(如果有的话)。

于 2013-05-04T14:05:02.857 回答