Out of Inodes - Dateien in Verzeichnissen zählen

Wenn die Inodes mal wieder volllaufen sollten, bin ich vorbereitet. >:]

#!/usr/bin/env python2
# -*- coding:utf8 -*-
__author__ = 'baccenfutter'
__licence__ = 'Academic Free 3.0'
__date__ = '2013-06-27'

import os
import sys


class Basedir(object):
    def __init__(self, base="/tmp"):
        """Representation of a base directory

        :param base:    str -- absolute path of base directory
        """
        self.base = base
        self.hiddenfiles = True
        self.__data = {}

    def __repr__(self):
        """repr(self) -> <Basedir|base=%s|layers=%i>"""
        return '<Basedir|%s>' % self.base

    def __get_dirs(self, base):
        """Helper for obtaining a subdirectory list

        :param base: str    -- absolute path of directory to traverse
        :returns: Generator
        """
        for d in os.walk(base).next()[1]:
            if self.hiddenfiles and d.startswith('.'):
                continue
            else:
                yield d

    def __get_files(self, base):
        """Helper for obtaining a file list

        :param base: str    -- absolute path of directory to traverse
        :return: Generator
        """
        for f in os.walk(base).next()[2]:
            if self.hiddenfiles and f.startswith('.'):
                continue
            else:
                yield f

    def __traverse(self, base, max_recursion, current=0):
        """

        :param base:            str -- absolute path of base directory
        :param max_recursion:   int -- max recursion level
        :param current:         int -- current recursion level
        """
        if current < max_recursion:
            for d in self.__get_dirs(base):
                self.__traverse(os.path.join(base, d), max_recursion, current + 1)
        elif current >= max_recursion:
            self.__data[base] = len(list(self.__get_files(base))) - 1
            for root, dirs, files in os.walk(base):
                self.__data[base] += 1

    def traverse(self, depth=0):
        """Traverse this basedir

        :param depth: int   -- maximum number of recursion, e.g. level of depth
        :return: list
        """
        if not self.__data:
            self.__traverse(self.base, max_recursion=depth)
        return sorted(self.__data.items(), key=lambda x: x[1])

if __name__ == '__main__':
    try:
        basename = sys.argv[1]
    except:
        basename = '/tmp/test'
    try:
        depth = int(sys.argv[2])
    except:
        depth = 1
    basedir = Basedir(basename)
    for d, i in basedir.traverse(depth):
        print '%8i %s' % (i, d)