批量创建子文件夹并按文件名特征迁移对应.txt文件至指定目录的技术实现需求
嘿,我来给你搞定这个批量文件分类迁移的需求!不管你是用终端命令还是写Python脚本,都能轻松应对数千个文件的场景,下面给你两个实用方案:
方案1:Bash命令行(适配Linux/macOS/WSL)
这个方法适合熟悉终端的用户,执行速度超快,处理大量文件效率拉满。
直接在终端里执行以下命令就行:
# 先创建MAIN_DATA根目录(不存在就创建,存在也不报错) mkdir -p MAIN_DATA # 遍历data目录下所有符合命名规则的txt文件 for file in data/SN.SXN*.txt; do # 从文件名里提取SXNxx部分(比如SN.SXN13.00.ABC.txt → SXN13) folder_name=$(echo "$file" | cut -d'.' -f2) # 创建对应子文件夹 mkdir -p "MAIN_DATA/$folder_name" # 移动文件到目标文件夹 mv "$file" "MAIN_DATA/$folder_name/" done
为啥这么写?
cut -d'.' -f2是按点分割文件名,取第2个字段正好是我们要的SXN前缀文件夹名;mkdir -p确保文件夹不存在时自动创建,避免重复创建报错;- 循环会自动处理所有匹配的文件,不用手动一个个操作。
方案2:Python脚本(跨平台,Windows也能用)
如果是Windows用户,或者需要更灵活的逻辑扩展,Python脚本就很合适,代码清晰还容易修改。
创建一个叫move_files.py的文件,把下面的代码粘进去:
import os import shutil # 定义源文件目录和目标根目录,根据你的实际路径调整 source_dir = "data" target_root = "MAIN_DATA" # 确保目标根目录存在 os.makedirs(target_root, exist_ok=True) # 遍历源目录下的所有文件 for filename in os.listdir(source_dir): # 只处理符合命名规则的txt文件 if filename.endswith(".txt") and filename.startswith("SN.SXN"): # 分割文件名提取SXNxx部分 filename_parts = filename.split('.') if len(filename_parts) >= 2: folder_name = filename_parts[1] # 拼接目标文件夹路径 target_folder = os.path.join(target_root, folder_name) # 创建目标文件夹(不存在就创建) os.makedirs(target_folder, exist_ok=True) # 拼接源文件和目标文件的完整路径 source_file = os.path.join(source_dir, filename) target_file = os.path.join(target_folder, filename) # 移动文件 shutil.move(source_file, target_file) # 可选:打印移动日志,方便跟踪进度 print(f"已移动:{filename} → {target_folder}")
运行方式:打开命令行,进入脚本所在目录,执行python move_files.py就搞定了。
小提示
- 先拿几个测试文件跑一遍,确认逻辑没问题再处理全部文件,避免误操作;
- 两个方案都能轻松处理数千个文件,Bash速度更快,Python更适合需要定制逻辑的场景;
- 如果有不符合命名规则的文件,脚本/命令会自动跳过,不会出问题。
内容的提问来源于stack exchange,提问作者manas




