如何编写Bash或Python脚本自动化批量处理符合命名规则的目录及文件
自动化处理方案
下面分别提供Bash和Python两种实现方案,均直接放在待处理目录的同级路径下运行即可。
Bash 脚本方案
#!/bin/bash # 替换为你实际的目标根路径,对应你操作里的 /path/to/ TARGET_ROOT="/path/to/" # 自动创建done目录,避免不存在报错 mkdir -p done # 遍历当前目录下所有子目录,跳过done目录 for dir in */; do [[ "$dir" == "done/" ]] && continue # 去掉目录名末尾的斜杠 dir_name=${dir%/} # 按空格拆分目录名,提取DIR类型和File序号 IFS=' ' read -r _ _ dir_type file_part file_num _ <<< "$dir_name" new_filename="${file_part} ${file_num}.ext" # 进入目录执行文件操作,用子shell避免频繁切换当前工作目录 ( cd "$dir_name" || exit 1 # 可选:加判断跳过不存在something.ext的目录 # [[ -f something.ext ]] || exit 0 mv something.ext "$new_filename" cp "$new_filename" "${TARGET_ROOT}${dir_type}/" ) # 处理完成后移动到done目录 mv "$dir_name" done/ done
首次运行可以先把mv、cp命令前加echo,确认输出的命令逻辑符合预期后再去掉echo正式执行。
Python 脚本方案
import os import shutil # 替换为你实际的目标根路径 TARGET_ROOT = "/path/to/" DONE_DIR = "done" os.makedirs(DONE_DIR, exist_ok=True) # 遍历当前目录下的所有条目 for entry in os.scandir("."): # 跳过非目录和done目录 if not entry.is_dir() or entry.name == DONE_DIR: continue dir_name = entry.name # 拆分目录名判断格式是否匹配 name_parts = dir_name.split(" ") if len(name_parts) < 6: continue dir_type = name_parts[2] new_filename = f"{name_parts[3]} {name_parts[4]}.ext" src_file = os.path.join(dir_name, "something.ext") new_file_path = os.path.join(dir_name, new_filename) target_file_path = os.path.join(TARGET_ROOT, dir_type, new_filename) # 可选:加判断跳过不存在目标文件的目录 # if not os.path.exists(src_file): # continue os.rename(src_file, new_file_path) shutil.copy2(new_file_path, target_file_path) shutil.move(dir_name, os.path.join(DONE_DIR, dir_name))
可选优化点
- 可以添加执行日志,记录每一步操作结果,方便后续排查问题
- 如果需要批量处理增量目录,可搭配crontab定时运行脚本,实现全自动化处理
内容的提问来源于stack exchange,提问作者kurokirasama
相关产品推荐
相关产品推荐

