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 ... ================================================================== """