diff options
Diffstat (limited to 'tools/utility/rename-tree.py')
-rwxr-xr-x | tools/utility/rename-tree.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tools/utility/rename-tree.py b/tools/utility/rename-tree.py new file mode 100755 index 0000000..c177eb6 --- /dev/null +++ b/tools/utility/rename-tree.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 + +import argparse +import os +import os.path +import re + +parser = argparse.ArgumentParser( + prog='rename-tree', + description='Recursively rename directories and files') + +parser.add_argument('old') +parser.add_argument('new') +parser.add_argument('dirs', nargs="+") + +args = parser.parse_args() + +old_regex = re.compile(args.old) +new = args.new + +def rename(path, isdir): + dirname = os.path.dirname(path) + filename = os.path.basename(path) + new_filename = re.sub(old_regex, new, filename) + dir_str = "/" if isdir else "" + if new_filename != filename: + os.rename(path, os.path.join(dirname, new_filename)) + print(f"{path}{dir_str} -> {new_filename}{dir_str}") + +for i, d in enumerate(args.dirs): + print(f"[{i + 1}/{len(args.dirs)}] Run for {d}:") + for dirpath, dirnames, filenames in os.walk(d, topdown=False): + for filename in filenames: + rename(os.path.join(dirpath, filename), False) + rename(dirpath, True) + +print("Done!") |