我可以使用以下命令获取目录及其大小的列表,并将它们从最大到最小排序(在示例中,我将目录重命名为数字以使其更容易理解).
$: 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] 举报,一经查实,本站将立刻删除。