unix命令-按大小排序的目录大小

toe95027  于 2022-11-29  发布在  Unix
关注(0)|答案(5)|浏览(322)

我使用以下命令:

du -h --max-depth=1 | sort -s

而我的结果是:

1.1M    ./abcd
1.1M    ./efgh
1.1M    ./xyxabcd
1.2G    ./oleoleole
1.2M    ./tests
196K    ./super-Package
2.0M    ./myjobs-build

但是,我希望它是按大小排序的,像这样:

1.2G    ./oleoleole
2.0M    ./myjobs-build
1.2M    ./tests
1.1M    ./abcd
1.1M    ./efgh
1.1M    ./xyxabcd
196K    ./super-Package
camsedfj

camsedfj1#

du -sh * | sort -hr

在这里,-h标志告诉操作系统排序,输入是人类可读的格式
此处-r标志指示按降序排序

输出示例:

Sai Kiran@Windows MINGW32 /bin
$ du -sh * | sort -hr
3.5M    msys-2.0.dll
2.3M    vimdiff.exe
2.3M    vim.exe
2.3M    view.exe
2.3M    rvim.exe
2.3M    rview.exe
2.3M    ex.exe
2.1M    sh.exe
2.1M    bash.exe
2.0M    msys-crypto-1.0.0.dll
1.9M    msys-perl5_22.dll
1.1M    sed.exe
932K    gpg.exe
928K    msys-svn_subr-1-0.dll
912K    msys-iconv-2.dll
816K    msys-sqlite3-0.dll
760K    winpty-agent.exe
756K    sshd.exe
712K    winpty.dll
704K    msys-svn_wc-1-0.dll
700K    ssh.exe
700K    slogin.exe
628K    rebase.exe
588K    openssl.exe
568K    gawk-4.1.3.exe
568K    gawk.exe
568K    awk.exe
557K    core_perl
544K    msys-asn1-8.dll
508K    msys-gmp-10.dll
472K    winpty.exe
472K    msys-curl-4.dll
452K    msys-krb5-26.dll
432K    ssh-keyscan.exe
432K    cygcheck.exe
428K    msys-svn_client-1-0.dll
zdwk9cvp

zdwk9cvp2#

你可以试试du -h --max-depth=1 | sort -hr

inkz8wg9

inkz8wg93#

sort命令将只对输出文件的行进行排序,如其手册页中所述:
sort -对文本文件的行进行排序
当你想按大小排序文件时,你可以简单地使用ls命令和-S开关:
-s,--size打印每个文件的分配大小,以块为单位
-S按文件大小排序,最大的在前
link

cpjpxq1n

cpjpxq1n4#

只需以字节为单位打印du,使用awk对数据进行排序和后处理:

du --max-depth=1 |
   sort -n -k1 | 
   awk -v u="K M G T" 'BEGIN{split(u, units);}
   { while($1 > 1024) {$1/=1024; unit++} $1=$1 FS units[unit]; unit=0 }
   1'

测试

$ mkdir a{1..3}
$ seq 100000 > a1/a
$ seq 100000000 > a2/a
$ seq 100 > a3/a

这样我们就有了:

$ du -h --max-depth=1
580K    ./a1
8,0K    ./a3
848M    ./a2
849M    .

而现在我们看到:

$ du --max-depth=1 | sort -n -k1 | awk -v u="K M G T" 'BEGIN{split(u, units);} { while($1 > 1024) {$1/=1024; unit++} $1=$1 units[unit]; unit=0 }1'
8 ./a3
580 ./a1
847.719K ./a2
848.297K .
z3yyvxxp

z3yyvxxp5#

请运行下面的一行bash shell脚本,以列出多个文件夹中所有文件的大小。注意:请根据您的需求更改文件夹位置。

/usr/bin/du -a /var/log /home/user/log |sort -nr |awk '{print $NF}'|while read l ;do echo "file $(du -csh $l|grep -vi total) " ;done|nl

相关问题