正确的办法! 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的第一列输出.
...