正确的办法!
duu
du 指令无法以可读的形式按照大小排序, du -d 1 -h | sort -nr
并不正确, 因而写一个简单的脚本进行实现.
rust
1use std::env;
2
3fn main() {
4 let args: Vec<String> = env::args().collect();
5 assert!(args.len() >= 2);
6
7 if args[1].len() > 18 {
8 println!("Number too large");
9 return;
10 }
11
12 for c in args[1].chars() {
13 if !c.is_digit(10) {
14 println!("Invalid number");
15 return;
16 }
17 }
18
19 let nr_bytes = args[1].parse::<u64>().unwrap();
20 /* KB -> MB -> GB */
21
22 let mut level: usize = 0;
23 let mut tmp = nr_bytes;
24 while tmp > 0 {
25 tmp /= 1024;
26 if tmp > 0 {
27 level += 1;
28 }
29 }
30
31 // du指令默认的单位是KB!
32 let levels = ["KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
33 print!("{:>.2}\t{}\t", nr_bytes as f64 / u64::pow(1024, level as u32) as f64, levels[level]);
34}
再用awk处理一下du的第一列输出.
awk还是博大精深, 这里反正完全不会语法地乱弄好像效果还行, 就凑活先用!
bash
1alias duu="du -d 1 | sort -nr | awk '{system(\"bytes_to_size \" \$1); print(\$2);}'"
输出: