2020-03-17 20:24:33 +00:00
|
|
|
'''
|
|
|
|
This program deletes all empty directories which are children of the given
|
|
|
|
starting directory. The starting directory itself will not be deleted even
|
|
|
|
if it is empty.
|
|
|
|
|
|
|
|
> prune_dirs .
|
|
|
|
> prune_dirs C:\\somepath
|
|
|
|
'''
|
2019-12-14 22:08:19 +00:00
|
|
|
import argparse
|
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
|
2020-03-17 20:24:33 +00:00
|
|
|
from voussoirkit import betterhelp
|
2019-12-14 22:08:19 +00:00
|
|
|
from voussoirkit import spinal
|
|
|
|
from voussoirkit import pathclass
|
|
|
|
|
|
|
|
|
|
|
|
def prune_dirs(starting):
|
|
|
|
starting = pathclass.Path(starting)
|
2021-05-18 00:00:51 +00:00
|
|
|
walker = spinal.walk(starting, yield_directories=True, yield_files=False)
|
2019-12-14 22:08:19 +00:00
|
|
|
|
|
|
|
double_check = set()
|
|
|
|
|
|
|
|
def pruneme(directory):
|
|
|
|
if directory == starting or directory not in starting:
|
|
|
|
return
|
|
|
|
if len(directory.listdir()) == 0:
|
|
|
|
print(directory.absolute_path)
|
|
|
|
os.rmdir(directory.absolute_path)
|
|
|
|
double_check.add(directory.parent)
|
|
|
|
|
|
|
|
for directory in walker:
|
|
|
|
pruneme(directory)
|
|
|
|
|
|
|
|
while double_check:
|
|
|
|
directory = double_check.pop()
|
|
|
|
pruneme(directory)
|
|
|
|
|
|
|
|
|
|
|
|
def prune_dirs_argparse(args):
|
|
|
|
return prune_dirs(args.starting)
|
|
|
|
|
|
|
|
def main(argv):
|
|
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
|
|
|
|
|
|
parser.add_argument('starting')
|
|
|
|
parser.set_defaults(func=prune_dirs_argparse)
|
|
|
|
|
2020-03-17 20:24:33 +00:00
|
|
|
return betterhelp.single_main(argv, parser, docstring=__doc__)
|
2019-12-14 22:08:19 +00:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
raise SystemExit(main(sys.argv[1:]))
|