获取每个用户的磁盘使用情况

获取每个用户的磁盘使用情况

当我输入时,sudo du -sh ~student1我得到了我期望的输出(见屏幕截图)。但是当我尝试使用以下脚本时:

#!/bin/bash

for user in "$@"; do
    sudo du -sh ~$user
done

做同样的事情,我收到一个错误,目录不存在。这里是屏幕截图。

(我知道我可以做到sudo du -sh student1 student2...,并且 bash 脚本是无用的,但我仍然不明白为什么它不起作用。)

我看了 特定用户的总磁盘使用量但这并不是我想要的。

答案1

shell 只对扩展参数进行一次传递,因此$user进行了扩展,但前面的内容~并未进行扩展。要重新解析输入行,请使用eval

...
eval sudo du -sh ~$user
...

答案2

正如@AFH 所提到的,波浪号 ( ~) 没有展开,您可以用eval它来处理这个问题......

或者您可以使用getent来获取用户的主目录:

$ getent passwd attie | cut -d: -f6
/home/attie

这样,就更容易检测到错误(而不是神秘的变量扩展问题)。

您甚至可以使用它来枚举用户目录:

$ getent passwd | cut -d: -f6 | grep -E '^/home/'
/home/attie
/home/bill

答案3

find . -printf "%u  %s\n" | awk '{user[$1]+=$2}; END{ for( i in user) print i " " user[i]}'

这将打印

jsmith 928057466

相同的功能

find . -user jsmith -type f -printf "%s\n" | awk '{t+=$1}END{print t}'

这将打印

928057466

相关内容