本文介绍了使用python脚本批量复制模板目录结构,并根据指定数量自动生成增加编号(如 shot_010、shot_020)文件夹和文件支持副本数、路径映射和安全重命名的灵活配置。
本文介绍了使用python脚本批量复制模板目录结构,并根据指定数量自动生成增加编号(如 shot_010、shot_020)文件夹和文件支持副本数、路径映射和安全重命名的灵活配置。
在影视制作、VFX流程或工程项目管理中,通常需要基于标准模板(如 shot_010)快速生成多个带序号的副本(如 shot_020、shot_030…),每个副本应保持完整的子目录结构和内部文件的同步重命名。手动操作容易出错,效率低下,借助 Python 可实现完全自动化、可复用、可扩展的批量处理。
以下是生产就绪的强大解决方案。核心逻辑分为三个步骤:生成序列名 → 创建目标目录 → 复制并重命名文件。我们 RootFolder/shot_010/folder/shot_010_comp_v01.comp 生成模板 n 一份递增编号副本:
import os
import shutil
def get_dir_name(count: int):
"""生成 shot_010, shot_020, ..., shot_N0 格式文件夹名(N 从 1 开始)"""
for i in range(1, count + 1):
yield f"shot_{i:02}0"
def get_file_name(count: int):
"""例如,生成相应的文件名 shot_010_comp_v01.comp → shot_020_comp_v01.comp"""
for i in range(1, count + 1):
yield f"shot_{i:02}0_comp_v01.comp"
def duplicate_shot_folder(
src_root: str = "shot_010",
dest_root: str = ".",
count: int = 5,
template_file_path: str = "shot_010/folder/shot_010_comp_v01.comp"
):
"""
批量复制模板文件夹,并按顺序重新命名
:param src_root: 源模板文件夹名(不含父路径)
:param dest_root: 目标根目录(默认当前目录)
:param count: 生成的副本数量
:param template_file_path: 与项目根相比,模板文件的路径(用于定位源文件)
"""
# 确保源文件的存在
if not os.path.isfile(template_file_path):
raise FileNotFoundError(f"不存在模板文件:{template_file_path}")
# 每一份副本都是通过遍历生成的
for dir_name, file_name in zip(get_dir_name(count), get_file_name(count)):
target_dir = os.path.join(dest_root, dir_name, "folder")
target_file = os.path.join(target_dir, file_name)
# 创建目标目录(含嵌套)
os.makedirs(target_dir, exist_ok=True)
# 复制文件(非硬链接,保证独立性)
shutil.copyfile(template_file_path, target_file)
print(f"✓ 已创建:{target_file}")
# ✅ 使用示例:生成 3 个副本(shot_010 → shot_030)
duplicate_shot_folder(count=3)关键说明及注意事项:
- ✅ 安全路径:使用
os.path.join()构建跨平台兼容路径;exist_ok=True避免重复创建目录报错;- ✅ 命名可控:
{i:02}0实现两位数字前导零(例如1→010,12→120),如果需要三位可以改为{i:03}0;- ⚠️ RootFolder 管理:脚本默认在当前目录下生成
shot_XXX,若需统一放置RootFolder/下,请将dest_root设为"RootFolder",并确保该目录已存在或提前创建;- ?️ 扩展建议:
- 支持多级子目录复制?改用
shutil.copytree()+ 后续重命名,或遍历os.walk()逐项处理;- 支持通配符替换(如自动更新)
.comp内部路径)?需要结合文本分析(如正则或正则) AST);- 增加 dry-run 模式?添加
--dry-run仅打印操作而不执行参数;- 调用集成命令行?搭配
argparse一键操作即可:python duplicate.py --count 10 --root RootFolder。
该方案重量轻,无外部依赖,开箱即用,不仅满足基本批量复制的需要,而且具有明确的扩展接口,是标准化项目初始化的理想工具。