diff options
| author | crupest <crupest@outlook.com> | 2023-12-11 15:02:08 +0800 | 
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2024-03-25 22:17:28 +0800 | 
| commit | 52566293e75055513d397bf3ad64af969cd1f185 (patch) | |
| tree | a3d43cf3edf2a7a39ab42487efae4b7084c2a81f /tools/utility | |
| parent | c5c20e48c7620ac9524302474d9856fe1fe67537 (diff) | |
| download | crupest-52566293e75055513d397bf3ad64af969cd1f185.tar.gz crupest-52566293e75055513d397bf3ad64af969cd1f185.tar.bz2 crupest-52566293e75055513d397bf3ad64af969cd1f185.zip | |
tools(utility): move rename-tree.py.
Diffstat (limited to 'tools/utility')
| -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!") | 
