在 Mac 上,使用 Bash,我倾向于这样做
du -sh *
告知当前目录中文件和文件夹的大小,以 MB 和 GB 为单位。但如果我想按大小对它们进行排序,我可能会这样做
du -sh * | sort -g
它不会很好地工作,因为没有考虑M
和G
(因此 44MB 可能被认为大于 20GB,因为 44 大于 20)。
有没有一种方法可以不编写程序而仅使用 UNIX 命令和/或 Bash 函数来做到这一点?
如果我关心该GB
范围内的文件和文件夹,我可以这样做:
du -sh * | egrep "^\s*\d+(.\d+)?G\s" | sort -g
它会显示
2.6G ski video clips
7.6G trip 2012.mp4
12G trip photos
但如果要考虑TB
or的MB
话,那么上面的就不行了。有没有办法使用 UNIX / Mac OS X 命令更普遍地做到这一点?
答案1
du -ks $(ls -d */) | sort -nr | cut -f2 | xargs -d '\n' du -sh 2> /dev/null
这是在 Mac 上测试的,仅运行du
一次。它有一个小错误,1K=1000 而不是 1024:
du -sk * | sort -n | perl -pe '@SI=qw(K M G T P); s:^(\d+?)((\d\d\d)*)\s:$1.$SI[((length $2)/3)]."\t":e'