File: treesize/folderitems.py

"""
==================================================================
Report the number of items in the folders of a folders tree, 
ordered by decreasing number of items.  Items include files, 
subfolders, and symlinks.   Use this script to find folders 
with the most items, which may impact file-processing speed.  
Optional command-line arguments: run mode (recur of flat), 
number folders to print, root of folder tree; if omitted by
position, defaults for each argument come from __main__ code.
==================================================================
"""

import os, sys

def flatitems(root, allfolders):
    for (dirhere, subshere, fileshere) in os.walk(root):
        allfolders.append((len(subshere) + len(fileshere), dirhere))

def recuritems(folder, allfolders):
    itemshere = 0
    for item in os.listdir(folder):
        itempath = os.path.join(folder, item)
        if os.path.islink(itempath):
            itemshere += 1
        elif not os.path.isdir(itempath):
            itemshere += 1
        else:
            itemshere += recuritems(itempath, allfolders) + 1
    allfolders.append((itemshere, folder))
    return itemshere

if __name__ == '__main__':
    mode = sys.argv[1] if len(sys.argv) >= 2 else 'recur'
    size = sys.argv[2] if len(sys.argv) >= 3 else 50
    root = sys.argv[3] if len(sys.argv) >= 4 else '/Users/me/MY-STUFF'

    allfolders = []
    if mode == 'recur':
        recuritems(root, allfolders)
    else:
        flatitems(root, allfolders)

    for info in sorted(allfolders, reverse=True)[:int(size)]:
        print(f'{info[0]:9,}  {info[1]}')

 
"""
==================================================================
Example output:

  210,102  /Users/me/MY-STUFF
   58,405  /Users/me/MY-STUFF/Code
   44,596  /Users/me/MY-STUFF/Websites
   32,395  /Users/me/MY-STUFF/Camera
   23,072  /Users/me/MY-STUFF/Camera/Digital-cameras-merged
   22,620  /Users/me/MY-STUFF/Camera/Digital-cameras-merged/MERGED
   21,783  /Users/me/MY-STUFF/Camera/Digital-cameras-merged/MERGED/PHOTOS
   21,366  /Users/me/MY-STUFF/Books
   18,548  /Users/me/MY-STUFF/Code/mergeall
   18,381  /Users/me/MY-STUFF/Books/Dev
   18,227  /Users/me/MY-STUFF/Websites/UNION
   14,596  /Users/me/MY-STUFF/Gadgets
   ...
==================================================================
"""



[Home page] Books Code Blog Python Author Train Find ©M.Lutz