मुझे कैसे पता चलेगा कि कौन सी फ़ाइल प्रकार सबसे अधिक स्थान ले रहा है?


0

मेरे पास एक जटिल फ़ोल्डर पदानुक्रम में एक zillion छोटी फाइलें हैं; ये बहुत अधिक स्थान ले रहे हैं (यानी। टेराबाइट्स)। मुझे यह पता लगाना है कि कौन सी फ़ाइल का प्रकार (।, .pdf आदि) सभी कमरे को उठा रहा है ताकि मैं उस प्रकार की सभी फ़ाइलों को हटाने पर विचार कर सकूं।

क्या कोई बैश कमांड / स्क्रिप्ट है जो इसे आसानी से मेरे लिए हल कर देगा? एक पायथन स्क्रिप्ट भी काम करने योग्य होगी, लेकिन मेरे पास कोई गुई नहीं है

धन्यवाद! एलेक्स

यह प्रासंगिक लगता है: https://stackoverflow.com/questions/1358920/bash-measure-disk-space-of-certain-file-types-in-aggregate

जवाबों:


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 का उपयोग करता हूं। ' यह दक्षता या प्रदर्शन को ध्यान में रखकर नहीं लिखा गया था, बस कुछ पाने के लिए। अंतिम परिणाम कुंजियों के लिए फ़ाइल एक्सटेंशन से भरा एक शब्दकोश है और प्रत्येक मान को एक स्ट्रिंग में परिवर्तित किया जाता है जो प्रत्येक फ़ाइल प्रकार के लिए कुल आकार के एक मानव पठनीय प्रारूप का प्रतिनिधित्व करता है। मैंने मानव प्रारूपण करने के लिए किसी अन्य व्यक्ति द्वारा लिखी गई विधि ली। अंतिम भाग आकार के अनुसार फ़ाइल प्रकारों को क्रमबद्ध करने के लिए कुछ फैंसी मुस्कुराहट है। यदि आप 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

एक शेल / gawk समाधान:

खोज: सभी फ़ाइल के लिए फ़ाइल नाम और आकार प्रिंट करें

gawk: कुंजी के रूप में प्रकार का उपयोग करके एक Assoc ऐरे बनाएं और आकार को मान के रूप में अभिव्यक्त करें। इनपुट के अंत में: सभी प्रकार के लिए प्रिंट आकार।

find DIR -name "*.*" -type f -printf "%f %s\n" | awk '{sub(/.*\./,"",$1);count[$1]+=$2} END{for (var in count) print var, count[var];}'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.