diff options
author | crupest <crupest@outlook.com> | 2023-11-13 13:46:34 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2023-11-13 13:47:29 +0800 |
commit | ed1df454af6e3c8726a80f32cc6db8e9d42d046f (patch) | |
tree | d4abce5de5ceb563ecdb3f7d6aa51168dcd24743 /tools | |
parent | 5494dffe8ab3145ea4487f4fee90878239e5e720 (diff) | |
download | crupest-ed1df454af6e3c8726a80f32cc6db8e9d42d046f.tar.gz crupest-ed1df454af6e3c8726a80f32cc6db8e9d42d046f.tar.bz2 crupest-ed1df454af6e3c8726a80f32cc6db8e9d42d046f.zip |
(tools) add rename-tree.py
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/rename-tree.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tools/rename-tree.py b/tools/rename-tree.py new file mode 100755 index 0000000..c177eb6 --- /dev/null +++ b/tools/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!") |