特定用户的文件夹排序列表(按大小)

pinkon5k  于 2022-10-17  发布在  Unix
关注(0)|答案(1)|浏览(198)

我需要一个命令来获取特定用户拥有的所有文件夹的列表。
有没有办法按照大小和所有大小的总和对它们进行排序?
我最近的尝试是:


# !/bin/bash

read -p "Enter user: " username

for folder in $(find /path/ -maxdepth 4 -user $username) ; do
        du -sh $folder | sort -hr
done

提前谢谢!

whhtz7ly

whhtz7ly1#

试试这个(版本1,不完整,请参阅下面的版本2!)


# !/bin/bash

tmp_du=$(mktemp)
path="/path"

find "$path" -maxdepth 4 -type d -print0 | while IFS= read -r -d '' directory
do
    du -sh "$directory" >>"$tmp_du"
done

sort -hr "$tmp_du"

echo ""
echo "TOTAL"
du -sh "$path"

rm -f "$tmp_du"
  • find-print0的解释如下:https://mywiki.wooledge.org/BashFAQ/001
  • 由于您想要每个目录的大小,您必须将所有结果存储在一个文件中,然后对其进行排序。
    版本2包括我在第一个答案中忘记的-USER,加上仅考虑该用户的目录的总数:

# !/bin/bash

read -rp "Enter user: " username

tmp_du=$(mktemp)
path="/path"

# Get a list of directories owned by "$username", and their size, store it in a file

find "$path" -maxdepth 4 -type d -user "$username" -exec du -s {} \; 2>/dev/null | sort -n >"$tmp_du"

# Add the first column of that file

sum=$( awk '{ sum+=$1 } END { print sum; }' "$tmp_du" )

# Output, must output first column in human readable format

numfmt --field=1 --to=iec <"$tmp_du"

# Output total

echo "Total: $(echo "$sum" | numfmt --to=iec)"

rm -f "$tmp_du"
  • 这里所有目录大小都存储在一个文件中
  • 总数是第一列的总和
  • 要以类似于du的-h的格式输出数字,请使用numfmt。

相关问题