根据单行上从大到小的大小列出目录

Modified on: Sat, 30 Jun 2018 09:42:00 +0800

我可以使用以下命令获取目录及其大小的列表,并将它们从最大到最小排序(在示例中,我将目录重命名为数字以使其更易于理解)。

$: du -sk [a-z]* 2>/dev/null | sort -nr
413096  one
106572  two
97452   three
76428   four
55052   five
45068   six
33680   seven
23220   eight
17716   nine

我正在编写一个需要从最大到最小输入这些目录的程序,但为了方便起见,它需要一行一行。是否有一个命令允许我在一行上从最大到最小的目录排序没有大小?

我希望输出如下:

one two three four five six seven eight nine
作者:,etho201

最佳答案

如果您确信目录名称不包含空格,那么在一行中获取所有目录名称很简单:

du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'

获取信息到python

如果要在python程序中捕获该输出并将其放入列表中。使用python2.7或更好:

import subprocess
dir_list = subprocess.check_output("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True).split()

在python2.6中:

import subprocess
subprocess.Popen("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True, stdout=subprocess.PIPE).communicate()[0].split()

我们还可以利用python的功能来减少shell的工作量,特别是不需要awk

subprocess.Popen("du -sk [a-z]*/ | sort -nr", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].split()[1::2]

可以进一步将du输出直接读入python,将大小转换为整数,然后按大小排序。但是,更简单的方法是在shell中使用sort -nr执行此操作。

指定目录

如果您想要的目录大小不在当前目录中,则有两种可能:

du -sk /some/path/[a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'

还有:

cd /some/path/ && du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'

这两者之间的区别在于/some/path是否包含在输出中。

作者:,John1024

相关问答

添加新评论