如何找出占用空间最多的文件类型?


0

我在复杂的文件夹层次结构中有很多小文件; 这些占用太多空间(即太字节)。我想找出哪个文件类型(即.pdf等)占用了所有空间,以便我可以考虑删除该类型的所有文件。

是否有一个bash命令/脚本可以轻松解决这个问题?python脚本也可行,但我没有gui。

谢谢!亚历克斯

这似乎是相关的:https//stackoverflow.com/questions/1358920/bash-measure-disk-space-of-certain-file-types-in-aggregate

Answers:


1

Quicktut:

列出目录中的所有文件:

import os
path="C:\\somedirectory"  # insert the path to the directory of interest
dirList=os.listdir(path)
for fname in dirList:
    print fname

你必须使上面的递归,以使它也适用于子文件夹。

获取文件的文件大小:

import os
b= os.path.getsize("/path/isa_005.mp3")

获取文件扩展名:

import os
ext = os.path.splitext(file_name)[1]

现在,您所要做的就是创建一个字典映射扩展到累积文件大小并打印出字典(可能在排序之后)。

希望能帮助到你。


0

我刚刚在大约5分钟内写完了这篇文章。而不是os.path.getsize我使用os.stat的st_size。我认为这不重要。我使用os.walk以递归的方式“遍历”当前工作总监的所有目录。这不是为了效率或性能而写的,只是为了让事情顺利进行。最终结果是填充了键的文件扩展名的字典,并且每个值被转换为表示每种文件类型的总大小的人类可读格式的字符串。我采用了别人写的方法来进行人工格式化。最后一部分是通过大小对文件类型进行排序的一些花哨的smancy。如果你点击ctrl + c它会杀死“sizing-up”并打印出它有时间收集的结果。很有趣!谢谢你的骑行,享受。

import os

#using code ripped from:
#http://www.5dollarwhitebox.org/drupal/node/84
#to convert to human readable format
def convert_bytes(bytes):
   bytes = float(bytes)
   if bytes >= 1099511627776:
      terabytes = bytes / 1099511627776
      size = '%.2fT' % terabytes
   elif bytes >= 1073741824:
      gigabytes = bytes / 1073741824
      size = '%.2fG' % gigabytes
   elif bytes >= 1048576:
      megabytes = bytes / 1048576
      size = '%.2fM' % megabytes
   elif bytes >= 1024:
      kilobytes = bytes / 1024
      size = '%.2fK' % kilobytes
   else:
      size = '%.2fb' % bytes
   return size

typesizeH = {}
typesize = {}


try:
   for root, dirs, files in os.walk('.'):
      for file in files:
         prefix, extension = os.path.splitext(file)
         if extension not in typesize:
            typesize[extension] = 0
         typesize[extension] += os.stat(root + os.sep + file).st_size
except KeyboardInterrupt:
   pass


for key in typesize:
   typesizeH[key] = convert_bytes(typesize[key])

print str(typesizeH)

types = typesize.keys()
types.sort(cmp=lambda a,b: cmp(typesize[a], typesize[b]), reverse=True)
print "Filetype\tSize"
for type in types:
   print "%s\t%s" % (type, typesizeH[type])

结果:

Filetype        Size
.7z     99.84M
.hpp    42.88M
.lib    39.40M
.ncb    28.50M
.dll    27.87M
.exe    25.26M
.h      10.33M
.obj    10.18M
.zip    6.83M
.svn-base       3.92M
        3.52M
.txt    2.28M
.csv    1.09M

0

shell / gawk解决方案:

find:打印所有文件的文件名和大小

gawk:使用type作为键创建一个Assoc Array,并将大小总计为值。在输入结束时:所有类型的打印尺寸。

find DIR -name "*.*" -type f -printf "%f %s\n" | awk '{sub(/.*\./,"",$1);count[$1]+=$2} END{for (var in count) print var, count[var];}'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.