如何用Python递归将子文件夹所有文件移至当前工作目录?
Python实现递归移动所有嵌套子文件夹文件至当前目录
需求说明
原目录结构:
├── movepy.py # 用于执行移动操作的脚本文件 └── testfodlerComp ├── asdas │ └── erwer.txt ├── asdasdas │ └── sdffg.txt └── asdasdasdasd ├── hoihoi.txt ├── hoihej.txt └── asd ├── dfsdf.txt └── dsfsdfsd.txt
需要将所有子文件夹(含嵌套层级)中的文件递归移动至当前工作目录,最终得到如下结构:
├── movepy.py ├── erwer.txt ├── sdffg.txt ├── hoihoi.txt ├── hoihej.txt ├── dfsdf.txt └── dsfsdfsd.txt
实际场景需处理的目录嵌套层级更多、文件数量更大,需考虑重名文件避免覆盖。
实现代码
将以下代码保存为movepy.py,放在目标根目录运行:
import pathlib import shutil def move_all_files_to_current_dir(): # 获取当前工作目录路径 current_dir = pathlib.Path.cwd() # 递归遍历当前目录下所有内容 for item in current_dir.rglob('*'): # 跳过脚本自身 if item.name == 'movepy.py': continue # 仅处理文件,跳过目录 if item.is_file(): target_path = current_dir / item.name # 处理重名文件:自动添加数字后缀 counter = 1 while target_path.exists(): stem = item.stem suffix = item.suffix target_path = current_dir / f"{stem}_{counter}{suffix}" counter += 1 # 执行移动操作 shutil.move(str(item), str(target_path)) print(f"已移动: {item} -> {target_path}") if __name__ == "__main__": move_all_files_to_current_dir()
关键说明
- 递归遍历:使用
pathlib的rglob方法递归获取所有文件,适配任意嵌套层级 - 重名处理:遇到同名文件时,自动生成
文件名_数字.扩展名的格式,避免文件覆盖丢失 - 跨平台兼容:
pathlib和shutil均为Python标准库,支持Windows、Linux、macOS - 安全跳过:自动跳过脚本自身,防止误移动
注意事项
- 运行前建议备份重要文件,避免意外
- 脚本需放在待处理的根目录(即
movepy.py所在目录)执行 - 移动完成后,空的子目录可手动删除,若需自动删除可在代码末尾添加空目录清理逻辑
内容的提问来源于stack exchange,提问作者Mister Verleg
相关产品推荐
相关产品推荐

