Added delete_empty_folders()

* Deletes folders only if they're empty and does so from the bottom up
  * (i.e. "Some\Path" will be removed before "Some")
This commit is contained in:
2Shirt 2018-10-07 21:23:10 -06:00
parent ceae05817d
commit a8a2fce662

View file

@ -38,10 +38,7 @@ def cleanup_adwcleaner():
shutil.move(source_quarantine, dest_name)
# Delete source folder if empty
try:
os.rmdir(source_path)
except OSError:
pass
delete_empty_folders(source_path)
# Main folder
if os.path.exists(source_path):
@ -139,11 +136,7 @@ def cleanup_d7ii():
shutil.move(entry.path, dest_path)
# Remove folder
try:
os.rmdir(entry.path)
except OSError:
# Folder should be empty but whatever
pass
delete_empty_folders(entry.path)
# Registry Items
for key, settings in D7_HKCR_CLEANUP.items():
@ -176,10 +169,7 @@ def cleanup_desktop():
shutil.move(entry.path, dest_name)
# Remove dir if empty
try:
os.rmdir(dest_folder)
except OSError:
pass
delete_empty_folders(dest_folder)
def cleanup_emsisoft():
"""Remove EmsisoftCmd files from drive root."""
@ -218,9 +208,23 @@ def cleanup_regbackups():
shutil.move(entry.path, dest_path)
# Delete source folders if empty
delete_empty_folders(r'{}\Support'.format(
global_vars['Env']['SYSTEMDRIVE']))
def delete_empty_folders(folder_path):
"""Delete all empty folders in path (depth first)."""
if not os.path.exists(folder_path) or not os.path.isdir(folder_path):
# Bail early (silently)
return
# Delete empty subfolders first
for item in os.scandir(folder_path):
if item.is_dir():
delete_empty_folders(item.path)
# Remove top folder
try:
os.rmdir(source_path)
os.rmdir(r'{}\Support'.format(global_vars['Env']['SYSTEMDRIVE']))
os.rmdir(folder_path)
except OSError:
pass