quota.py - Große Dateien finden...
Verfasst: Montag 3. Juli 2006, 10:36
Hier ein kleines Skript, um die größten Dateien zu finden:
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: cp1252 -*-
__author__ = "Jens Diemer"
__license__ = """GNU General Public License v2 or above
http://www.opensource.org/licenses/gpl-license.php"""
__url__ = "http://www.jensdiemer.de"
__version__ = "v0.1"
__info__ = """quota.py (%s) - finding your biggest files ;)""" % __version__
import sys, os, fnmatch, time, optparse
usage = "%prog [options]"
# Encoding des Dateisystems herausfinden
fs_encoding = sys.getfilesystemencoding()
def filesizeformat(i):
"""
Taken from jinja
Format the value like a 'human-readable' file size (i.e. 13 KB, 4.1 MB,
102 bytes, etc).
"""
bytes = float(i)
if bytes < 1024:
return u"%d Byte%s" % (bytes, bytes != 1 and u's' or u'')
if bytes < 1024 * 1024:
return u"%.1f KB" % (bytes / 1024)
if bytes < 1024 * 1024 * 1024:
return u"%.1f MB" % (bytes / (1024 * 1024))
return u"%.1f GB" % (bytes / (1024 * 1024 * 1024))
class Quota:
def __init__(self, min_size):
self.min_size = min_size * 1024 * 1024
print "Display all files who are bigger than %s" % (
filesizeformat(self.min_size)
)
self.total_size=0
self.total_file_count=0
self.total_dir_count=0
self.old_time = time.time()
def scan(self, path):
print
print "scan [%s]..." % path
print
os.path.walk(path, self.path_walk, "")
print "\r", " "*79
self.print_status_line()
print
def path_walk(self, arg, current_dir, FileNames):
for file_name in FileNames:
abs_file=os.path.join(current_dir, file_name)
if os.path.isdir(abs_file):
self.total_dir_count+=1
continue
self.total_file_count+=1
if os.path.isfile(abs_file):
bytes=os.stat(abs_file)[6]
self.total_size += bytes
if bytes > self.min_size:
abs_file = unicode(abs_file, fs_encoding, "replace")
if len(abs_file)>70:
abs_file = "%s...%s" % (abs_file[:20], abs_file[-55:])
print "\r%9s - %s" % (
filesizeformat(bytes), abs_file
)
self.print_status_line()
#~ else:
#~ print "skip '%s'" % abs_file
if time.time()-self.old_time > 1:
self.print_status_line()
def print_status_line(self):
sys.stdout.write(
"\r%s total size - %s files scanned." % (
filesizeformat(self.total_size), self.total_file_count
)
)
sys.stdout.flush()
self.old_time = time.time()
def print_total_stat(self):
print
print "total dir count....:", self.total_dir_count
print "total file count...:", self.total_file_count
print "total size.........:", filesizeformat(self.total_size)
print
def main():
"""
Hauptprog.
"""
print "_"*79
print __info__
print
parser = optparse.OptionParser(usage=usage)
parser.add_option("-p", "--path",
dest="path",
default=".",
action="store",
help="basepath to scan (default: '.')"
)
parser.add_option("-s", "--size",
dest="size",
default=5,
type = int,
action="store",
help=(
"size limit in MB"
" - Display all files who are bigger."
" (Default: 5MB)"
)
)
(options, args) = parser.parse_args()
q = Quota(options.size)
q.scan(options.path)
q.print_total_stat()
if __name__ == '__main__':
main()