如何按文件名前缀日期筛选并复制每日生成的tar.gz文件?
实现每日自动复制指定格式文件的Python方案
核心思路
- 生成当日的
YYYYMMDD格式日期字符串,作为筛选文件名的前缀 - 遍历源目录,匹配以该前缀开头、且符合
*_versionName=*.tar.gz后缀的文件 - 将匹配到的文件复制到目标目录,自动创建不存在的目标目录
- 处理常见异常情况(目录不存在、无匹配文件等)
完整代码实现
import os import shutil from datetime import datetime def copy_daily_file(source_dir, target_dir): # 获取当日日期,格式化为YYYYMMDD today_date = datetime.now().strftime("%Y%m%d") # 定义文件名匹配规则:以当日日期开头,包含_versionName=标识且以.tar.gz结尾 prefix = today_date required_tag = "_versionName=" # 检查源目录是否存在 if not os.path.exists(source_dir): print(f"错误:源目录 {source_dir} 不存在") return # 创建目标目录(如果不存在) os.makedirs(target_dir, exist_ok=True) # 遍历源目录筛选符合条件的文件 matched_files = [] for filename in os.listdir(source_dir): full_path = os.path.join(source_dir, filename) # 只处理文件,排除子目录 if os.path.isfile(full_path) and filename.startswith(prefix) and required_tag in filename and filename.endswith(".tar.gz"): matched_files.append(filename) if not matched_files: print(f"未找到符合条件的文件,日期前缀:{today_date}") return # 执行复制操作 for filename in matched_files: source_path = os.path.join(source_dir, filename) target_path = os.path.join(target_dir, filename) # 可选:避免覆盖已存在的目标文件 if os.path.exists(target_path): print(f"目标目录已存在文件 {filename},跳过复制") continue shutil.copy2(source_path, target_path) print(f"已成功复制文件:{filename}") # 替换为你的实际目录路径 SOURCE_DIR = "/your/source/folder/path" TARGET_DIR = "/your/target/folder/path" # 启动复制流程 copy_daily_file(SOURCE_DIR, TARGET_DIR)
关键细节说明
- 日期匹配:用
datetime.now().strftime("%Y%m%d")确保生成的日期格式与文件名前缀完全一致,若服务器时区与本地不同,可替换为datetime.utcnow()或指定时区生成日期 - 精准筛选:同时校验文件名前缀、中间标识和后缀,避免误复制其他相似格式的文件
- 鲁棒性处理:自动创建目标目录、跳过已存在文件、检查源目录有效性,减少运行报错概率
常见问题排查
- 无匹配文件:检查源目录路径是否正确,确认当日生成的文件名前缀与代码输出的
today_date一致 - 复制失败:检查源文件是否被占用、目标目录是否有写入权限
内容的提问来源于stack exchange,提问作者Manonthemoon
相关产品推荐
相关产品推荐

