codex封面

Windows 版 Codex App 使用一段时间以后,会在用户目录中保存会话、配置以及其他运行数据。

默认情况下,Codex 的主要用户数据通常位于:

C:\Users\你的用户名\.codex

如果电脑只有一个磁盘,或者 C 盘空间比较充足,那么保持默认即可,没有必要额外修改。

但如果 C 盘空间比较紧张,或者希望把 Codex 长期产生的数据统一保存到 D 盘、E 盘等其他磁盘,可以通过 Windows 的 Junction(目录联接).codex 实际迁移到其他磁盘。

本文记录完整迁移过程。


一、Codex 数据迁移原理

假设准备把 Codex 数据迁移到:

D:\Codex\Data

迁移完成以后,目录关系实际上是:

C:\Users\你的用户名\.codex
                ↓
             Junction
                ↓
D:\Codex\Data

Codex 仍然访问原来的:

C:\Users\你的用户名\.codex

但 Windows 会自动把这些访问转向:

D:\Codex\Data

这样不需要重新安装 Codex,也不会改变日常使用方式。


二、将 .codex 数据迁移到其他磁盘

整个迁移过程可以概括为:

关闭 Codex App
        ↓
确认原 .codex 目录
        ↓
创建新的数据目录
        ↓
复制原 .codex 数据
        ↓
将原 .codex 改名为备份
        ↓
创建 Junction
        ↓
启动 Codex 并验证
        ↓
确认正常后删除旧备份

迁移时建议遵循一个原则:

先复制,确认新目录能够正常使用以后,再删除原数据。

不要一开始就直接剪切或者删除 .codex


1. 完全关闭 Codex App

迁移之前先彻底退出 Codex App,避免迁移过程中程序继续修改 .codex 中的数据。

然后打开 PowerShell。

确认原来的 .codex 是否存在:

$old = Join-Path $HOME ".codex"

$old

Test-Path $old

正常情况下可能会看到:

C:\Users\你的用户名\.codex

True

其中 True 表示原来的 .codex 数据目录确实存在。

还可以查看目录中的内容:

Get-ChildItem "$HOME\.codex" -Force

如果希望先查看 .codex 大约占用了多少空间,可以执行:

"{0:N2} GB" -f (
    (Get-ChildItem "$HOME\.codex" -Recurse -Force -ErrorAction SilentlyContinue |
        Measure-Object Length -Sum).Sum / 1GB
)

2. 创建新的数据目录

假设希望把 Codex 数据迁移到:

D:\Codex\Data

执行:

$new = "D:\Codex\Data"

New-Item -ItemType Directory -Force -Path $new

这里的目标路径可以根据自己的磁盘情况修改。

例如也可以使用:

E:\Codex\Data

或者其他希望保存 Codex 数据的位置。


3. 复制原来的 .codex 数据

推荐使用 Windows 自带的 robocopy

robocopy "$old" "$new" /E /COPY:DAT /DCOPY:DAT /R:2 /W:1

其中:

  • /E:复制所有子目录,包括空目录;
  • /COPY:DAT:复制文件的数据、属性和时间信息;
  • /DCOPY:DAT:保留目录的数据、属性和时间信息;
  • /R:2:复制失败时最多重试 2 次;
  • /W:1:每次重试之间等待 1 秒。

复制完成以后,此时应该同时存在:

C:\Users\你的用户名\.codex

以及:

D:\Codex\Data

这是正常现象。

此时不要删除 C 盘中的原 .codex

可以执行:

Get-ChildItem "D:\Codex\Data" -Force

确认原来的数据已经复制到新目录。


4. 将原 .codex 改名为备份

确认数据复制完成以后,把原目录先改名:

Rename-Item "$HOME\.codex" ".codex.backup"

此时原数据会暂时保存在:

C:\Users\你的用户名\.codex.backup

而原来的:

C:\Users\你的用户名\.codex

已经空出来,可以用于创建 Junction。

可以执行:

Test-Path "$HOME\.codex"

正常情况下应该返回:

False

此时不要删除:

C:\Users\你的用户名\.codex.backup

它仍然作为迁移失败时的备用数据。


5. 创建 Junction

现在创建目录联接。

执行:

New-Item `
    -ItemType Junction `
    -Path "$HOME\.codex" `
    -Target "$new"

创建完成以后,Windows 用户目录中会重新出现:

C:\Users\你的用户名\.codex

但这一次它已经不是普通文件夹,而是一个 Junction。

实际数据仍然保存在:

D:\Codex\Data

可以通过下面的命令检查:

Get-Item "$HOME\.codex" |
    Format-List FullName,LinkType,Target

正常情况下应该看到类似:

FullName : C:\Users\你的用户名\.codex
LinkType : Junction
Target   : D:\Codex\Data

其中最重要的是:

LinkType : Junction

以及:

Target : D:\Codex\Data

只要这两项正确,就说明目录联接已经创建成功。

还可以使用:

cmd /c dir "$HOME" /AL

查看当前用户目录中的 Junction。

结果中可能会看到类似:

<JUNCTION>    .codex    [D:\Codex\Data]

6. 启动 Codex 并验证数据

现在重新打开 Codex App。

重点检查:

  • 原来的会话是否仍然存在;
  • 原来的项目是否可以继续使用;
  • Codex 配置是否正常;
  • 新建会话是否能够正常保存。

正常使用一段时间以后,可以执行:

Get-ChildItem "D:\Codex\Data" -Force

查看新目录中的文件。

如果使用 Codex 后,新目录中的文件持续出现新的写入或修改,就说明 Codex 已经正常通过 Junction 使用 D 盘中的数据。

也可以再次执行:

Get-Item "$HOME\.codex" |
    Format-List FullName,LinkType,Target

确认 Junction 仍然正常指向:

D:\Codex\Data

7. 确认正常后删除旧备份

迁移完成以后,不建议第一次成功启动 Codex 就马上删除旧数据。

可以先正常使用一段时间。

确认:

  • 原来的会话可以正常打开;
  • 配置没有丢失;
  • 新建会话能够正常保存;
  • D:\Codex\Data 中的数据持续更新;
  • Codex App 没有出现异常。

确认没有问题以后,再删除原来的备份目录:

Remove-Item "$HOME\.codex.backup" -Recurse -Force

删除以后:

C:\Users\你的用户名\.codex.backup

占用的实际 C 盘空间才会真正释放。

需要注意,Remove-Item -Recurse -Force 属于直接删除操作,因此一定要在确认迁移成功以后再执行。


三、迁移完成后需要注意的问题

1. 为什么 C 盘里仍然能看到 .codex

迁移成功以后:

C:\Users\你的用户名\.codex

仍然存在,这是正常的。

因为现在的 .codex 是一个 Junction。

它本身位于:

C:\Users\你的用户名

但真正的数据已经保存在:

D:\Codex\Data

可以随时执行:

Get-Item "$HOME\.codex" |
    Format-List FullName,LinkType,Target

进行确认。

只要看到:

LinkType : Junction

并且 Target 正确指向新的磁盘目录,就说明迁移仍然有效。

因此,即使资源管理器中仍然能看到 .codex,也不代表里面的数据仍然实际占用 C 盘空间。


2. Codex App 仍然可能在 C 盘产生少量缓存和运行文件

迁移 .codex 主要解决的是 Codex 的主要用户数据目录。

Codex App 自身仍然可能在 Windows 的:

%LOCALAPPDATA%

等位置保存应用缓存、日志以及运行组件。

这些内容与 .codex 中的会话和用户数据性质不同。

因此,没有必要为了让 C 盘完全不存在 Codex 文件,而继续强制迁移整个 Codex AppData 目录。

只要把 .codex 这种长期使用以后可能持续增长的数据目录迁移出去,就已经能够减少主要的 C 盘占用。


总结

Windows Codex App 的主要用户数据通常位于:

C:\Users\你的用户名\.codex

如果希望减少 C 盘长期占用,可以通过 Windows 的 Junction 将这个目录实际迁移到其他磁盘。

整个流程可以概括为:

关闭 Codex App
        ↓
复制 .codex 到其他磁盘
        ↓
将原 .codex 改名为备份
        ↓
创建 Junction
        ↓
启动 Codex 并验证
        ↓
确认正常后删除旧备份

核心命令为:

$old = Join-Path $HOME ".codex"
$new = "D:\Codex\Data"

New-Item -ItemType Directory -Force -Path $new

robocopy "$old" "$new" /E /COPY:DAT /DCOPY:DAT /R:2 /W:1

Rename-Item "$HOME\.codex" ".codex.backup"

New-Item `
    -ItemType Junction `
    -Path "$HOME\.codex" `
    -Target "$new"

然后通过:

Get-Item "$HOME\.codex" |
    Format-List FullName,LinkType,Target

确认结果类似:

FullName : C:\Users\你的用户名\.codex
LinkType : Junction
Target   : D:\Codex\Data

确认 Codex 能够正常读取原有会话并继续保存新数据以后,再执行:

Remove-Item "$HOME\.codex.backup" -Recurse -Force

删除原来的 C 盘备份。

这样不需要重新安装 Codex,也不会改变日常使用方式,同时能够把 .codex 中长期积累的会话和用户数据实际保存到其他磁盘。

Logo

葡萄城是专业的软件开发技术和低代码平台提供商,聚焦软件开发技术,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。

更多推荐