今天有如题的需求,但是光靠du命令似乎实现不了,于是查了下,最后使用du和sort组合完成需求,大家有更好的方法快点告诉我啊~
命令格式:
du [选项][文件]
命令功能:
显示每个文件和目录的磁盘使用空间。
命令参数:
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k或--kilobytes 以KB(1024bytes)为单位输出。
-m或--megabytes 以MB为单位输出。
-s或--summarize 仅显示总计,只列出最后加总的值。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
-D或--dereference-args 显示指定符号链接的源文件大小。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
-l或--count-links 重复计算硬件链接的文件。
1、使用du之后得到如下结果:
du -h --time --max-depth=1 .
输出当前目录的文件夹大小并显示时间:
接着需要对时间进行排序,很自然想到管道:
管道符号,是unix一个很强大的功能,符号为一条竖线:"|"。用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为command2的输入传给command 2 接着使用管道把du的结果交给sort排序
sort命令总结
功能:排序
语法:sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]
-b 忽略每行前面开始出的空格字符。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-c 检查文件是否已经按照顺序排序。
-m 将几个排序好的文件进行合并。
-M 前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
-k 指定域
--help 显示帮助。
--version 显示版本信息。
2、命令组合如下:
du -h --time --max-depth=1 . |grep 'M'| sort -r -t $'\t' -k 2
其中grep 'M'是只取出M级别的文件夹进行排序,
sort中-t之后的$'\t'是指使用tab键分割字符串,-k 2 指按照分割后的第二列字符串来排序: