duu: 按照大小排序的du指令

 Linux  shell  du 󰈭 276字

正确的办法!

du -d 1 -h | sort -hr

duu

du 指令无法以可读的形式按照大小排序, du -d 1 -h | sort -nr并不正确, 因而写一个简单的脚本进行实现.

 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还是博大精深, 这里反正完全不会语法地乱弄好像效果还行, 就凑活先用!

1alias duu="du -d 1 | sort -nr | awk '{system(\"bytes_to_size \" \$1); print(\$2);}'"

输出:


修改记录:
duu: 按照大小排序的du指令