批量重命名:移除带浮点格式前缀文件名的非浮点数部分
批量重命名带浮点数前缀的文件(递归遍历子目录)
需求说明
只处理以X.XX格式浮点数为前缀的文件,将文件名替换为该浮点数本身;其他格式文件名(如30-39、31 {filename})保持不变,同时递归处理目标目录下的所有子目录。
Python 实现(跨平台通用)
import os import re # 匹配开头为浮点数前缀的正则:数字+小数点+数字,后续跟空格和任意内容 prefix_pattern = re.compile(r'^(\d+\.\d+)\s.*') def batch_rename(root_dir): # 递归遍历所有子目录和文件 for root, _, files in os.walk(root_dir): for file_name in files: match_result = prefix_pattern.match(file_name) if match_result: # 提取浮点数前缀作为新文件名 new_file_name = match_result.group(1) old_file_path = os.path.join(root, file_name) new_file_path = os.path.join(root, new_file_name) # 避免覆盖已存在的文件 if not os.path.exists(new_file_path): os.rename(old_file_path, new_file_path) print(f"重命名完成: {old_file_path} → {new_file_path}") else: print(f"跳过: {new_file_path} 已存在,不覆盖") if __name__ == "__main__": # 替换为你的目标目录路径,例如 "./my_files" target_dir = "./your_target_directory" if os.path.isdir(target_dir): batch_rename(target_dir) else: print(f"错误:目录 {target_dir} 不存在,请检查路径")
Python 脚本关键点
- 使用
os.walk递归遍历所有子目录 - 正则表达式精准匹配浮点数前缀的文件,避免误处理其他格式
- 重命名前检查目标文件是否存在,防止数据覆盖
Shell 脚本(Linux/macOS 适用)
#!/bin/bash # 替换为你的目标目录路径 TARGET_DIR="./your_target_directory" # 递归查找符合浮点数前缀的文件,并批量重命名 find "$TARGET_DIR" -type f -regex '.*/[0-9]+\.[0-9]+ .*' | while read -r old_file; do # 提取文件名部分 file_name=$(basename "$old_file") # 用sed提取浮点数前缀作为新文件名 new_file_name=$(echo "$file_name" | sed -E 's/^([0-9]+\.[0-9]+) .*/\1/') # 拼接新文件路径 new_file_path=$(dirname "$old_file")/"$new_file_name" # 检查文件是否存在,避免覆盖 if [ ! -e "$new_file_path" ]; then mv "$old_file" "$new_file_path" echo "重命名完成: $old_file → $new_file_path" else: echo "跳过: $new_file_path 已存在" fi done
Shell 脚本关键点
find命令的-regex参数精准筛选目标文件sed命令快速提取浮点数前缀- 处理包含空格的文件名,兼容大多数场景
注意事项
- 测试先行:建议先备份文件,或注释掉实际重命名的代码(Python中注释
os.rename,Shell中把mv改成echo mv),确认匹配逻辑正确后再执行 - 特殊字符处理:如果文件名包含引号、特殊符号,可能需要额外调整脚本逻辑
- Windows 注意:Shell脚本无法在Windows原生环境运行,推荐使用Python脚本
内容的提问来源于stack exchange,提问作者Kamil
相关产品推荐
相关产品推荐

