Как я узнаю, какой тип файла приведение в рабочее состояние является большей частью пространства?

У меня есть огромное количество небольших файлов в сложной иерархии папок; они занимают слишком много места (т.е. терабайты). Я хотел бы узнать, какой тип файла (т.е., .pdf и т.д.) поднимает всю комнату так, чтобы я мог рассмотреть удаление всех файлов того типа.

Существует ли команда/сценарий удара, которая решила бы это для меня легко? Сценарий Python также был бы осуществим, но у меня нет gui.

Спасибо! Alex

Это кажется релевантным: https://stackoverflow.com/questions/1358920/bash-measure-disk-space-of-certain-file-types-in-aggregate

0
задан 23.05.2017, 15:41

3 ответа

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]

Теперь, все, что необходимо сделать, создают словарь, отображающий расширения накопленного размера файла, и распечатывают словарь (возможно, после сортировки или чего-то).

Надежда это помогает.

1
ответ дан 24.11.2019, 12:28

Я просто записал это приблизительно за 5 минут. Вместо os.path.getsize я использую st_size os.stat. Я не думаю, что это действительно имеет значение. Я использую os.walk для рекурсивного "хождения" через все каталоги в текущем рабочем директоре '.', который это не было записано для эффективности или производительности в памяти, только для получения чего-то движение. Конечным результатом является словарь, заполненный расширениями файла для ключей, и каждое значение преобразовывается в строку, представляющую человекочитаемый формат общего размера для каждого типа файла. Я взял метод, записанный кем-то еще, чтобы сделать человеческое форматирование. Последняя часть является некоторым воображением smancy для сортировки типов файлов по размеру. При ударе ctrl+c, он уничтожает "оценивание" и просто печатает результаты, которые он имел время для сбора. Довольно забавный! Спасибо за поездку наслаждаться.

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
ответ дан 24.11.2019, 12:28

Решение для оболочки/простофили:

найдите: Распечатайте имя файла и размер для всех файлов

простофиля: Создайте Массив Помощника с помощью типа в качестве ключевого и размера, которому подводят итог, как значение. В конце входа: размер печати для всех типов.

find DIR -name "*.*" -type f -printf "%f %s\n" | awk '{sub(/.*\./,"",$1);count[$1]+=$2} END{for (var in count) print var, count[var];}'
0
ответ дан 24.11.2019, 12:28

Теги

Похожие вопросы