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

 Linux  shell  du 󰈭 282字

正确的办法!

du -d 1 -h | sort -hr

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);}'"

输出:

duu: 按照大小排序的du指令
嗨! 这里是 rqdmap 的个人博客, 我正关注 GNU/Linux 桌面系统, Linux 内核 以及一切有趣的计算机技术! 希望我的内容能对你有所帮助~
如果你遇到了任何问题, 包括但不限于: 博客内容说明不清楚或错误; 样式版面混乱; 加密博客访问请求等问题, 请通过邮箱 rqdmap@gmail.com 联系我!
修改日志
  • 2023-05-29 23:05:14 博客结构与操作脚本重构
  • 2023-05-08 21:44:36 博客架构修改升级
  • 2023-03-13 17:02:11 duu: 更新了正确的shell指令