微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

$: 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

解决方法:

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

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是否包含在输出中.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐