Skip to content

Instantly share code, notes, and snippets.

@jacobtomlinson
Last active December 22, 2025 16:23
Show Gist options
  • Select an option

  • Save jacobtomlinson/9031697 to your computer and use it in GitHub Desktop.

Select an option

Save jacobtomlinson/9031697 to your computer and use it in GitHub Desktop.
Python Recursively Remove Empty Directories
#! /usr/bin/env python
'''
Module to remove empty folders recursively. Can be used as standalone script or be imported into existing script.
'''
import os, sys
def removeEmptyFolders(path, removeRoot=True):
'Function to remove empty folders'
if not os.path.isdir(path):
return
# remove empty subfolders
files = os.listdir(path)
if len(files):
for f in files:
fullpath = os.path.join(path, f)
if os.path.isdir(fullpath):
removeEmptyFolders(fullpath)
# if folder empty, delete it
files = os.listdir(path)
if len(files) == 0 and removeRoot:
print "Removing empty folder:", path
os.rmdir(path)
def usageString():
'Return usage string to be output in error cases'
return 'Usage: %s directory [removeRoot]' % sys.argv[0]
if __name__ == "__main__":
removeRoot = True
if len(sys.argv) < 1:
print "Not enough arguments"
sys.exit(usageString())
if not os.path.isdir(sys.argv[1]):
print "No such directory %s" % sys.argv[1]
sys.exit(usageString())
if len(sys.argv) == 2 and sys.argv[2] != "False":
print "removeRoot must be 'False' or not set"
sys.exit(usageString())
else:
removeRoot = False
removeEmptyFolders(sys.argv[1], removeRoot)
@pagebase
Copy link

import os

def remove_empty_folders(root_path):
    # Walk through the directory tree in reverse order (bottom-up)
    for dirpath, dirnames, filenames in os.walk(root_path, topdown=False):
        # Check if the directory is empty (no files and no subdirectories)
        if not dirnames and not filenames:
            try:
                os.rmdir(dirpath)
                print(f"Removed empty directory: {dirpath}")
            except OSError as e:
                print(f"Could not remove {dirpath}: {e}")

# Specify the root path (C drive)
root_path = "C:\\"

# Call the function to remove empty folders
remove_empty_folders(root_path)   

This code also work fine, but can't remove system's empty directories. Is there any robust way to delete empty system directories?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment