按字母顺序列出du命令的结果

时间:2012-11-19 10:29:27

标签: linux du

如何按字母顺序列出du命令的结果?

我知道我可以使用find命令按字母顺序列出它们,但是如果没有目录大小,我也会对这两个命令使用-maxdepth选项,这样列表只会在一个子目录下。

以下是斜体的问题:

编写一个实现目录大小分析器的shell脚本。在您的脚本中,您可以使用常见的Linux命令。该脚本应列出给定参数的每个直接子目录占用的磁盘存储或当前目录(如果没有给出参数),子目录名称按字母顺序排序。此外,列出具有最高磁盘使用率的子目录的名称及其存储大小。如果多个子目录具有相同的最高磁盘使用率,请列出其中任何一个子目录。包括有意义的简短评论。适用于此脚本的bash命令列表包括以下但不限于:cat,cut,du,echo,exit,for,head,if,ls,rm,sort,tail,wc。您可以使用bash变量以及临时文件来保存中间结果。在执行结束时删除所有临时文件。

以下是在命令行中输入du $dir -hk --max-depth=2 | sort -o temp1.txt然后cat temp1.txt后的结果:

12      ./IT_PLAN/Inter_Disciplinary
28      ./IT_PLAN
3       ./IT_PLAN/Core_Courses
3       ./IT_PLAN/Pre_reqs
81      .
9       ./IT_PLAN/IT_Electives

它应该是这样的:

28      ./IT_PLAN
3       ./IT_PLAN/Core_Courses
12      ./IT_PLAN/Inter_Disciplinary
9       ./IT_PLAN/IT_Electives
The subdirectory with the maximum disk space use:
28      ./IT_PLAN

再一次,我无法按字母顺序排序结果。

2 个答案:

答案 0 :(得分:32)

尝试这样做:

du $dir -hk --max-depth=2 | sort -k2

-k2是第2列

请参阅http://www.manpagez.com/man/1/sort/

答案 1 :(得分:1)

du $dir -hk --max-depth=2 |awk '{print $2"\t"$1}'|sort -d -k1 -o temp1.txt 如果你想删除./路径

 du $dir -hk --max-depth=2 |awk '{print $2"\t"$1}'|sed -e 's/\.\///g'|sort -d -k1 -o temp1.txt