You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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
  • 安全跳过:自动跳过脚本自身,防止误移动

注意事项

  1. 运行前建议备份重要文件,避免意外
  2. 脚本需放在待处理的根目录(即movepy.py所在目录)执行
  3. 移动完成后,空的子目录可手动删除,若需自动删除可在代码末尾添加空目录清理逻辑

内容的提问来源于stack exchange,提问作者Mister Verleg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:55:45