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

输出:

嗨! 这里是 rqdmap 的个人博客, 我正关注 GNU/Linux 桌面系统, Linux 内核, 后端开发, Python, Rust 以及一切有趣的计算机技术! 希望我的内容能对你有所帮助~
如果你遇到了任何问题, 包括但不限于: 博客内容说明不清楚或错误; 样式版面混乱等问题, 请通过邮箱 rqdmap@gmail.com 联系我!
修改记录:
  • 2023-05-29 23:05:14大幅重构了python脚本的目录结构,实现了若干操作博客内容、sqlite的助手函数;修改原本的文本数 据库(ok)为sqlite数据库,通过嵌入front-matter的page_id将源文件与网页文件相关联
  • 2023-05-08 21:44:36博客架构修改升级
  • 2023-03-13 17:02:11duu: 更新了正确的shell指令
duu: 按照大小排序的du指令