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