还在为 cp -r 复制像 node_modules 或大型代码库这样包含海量小文件的目录而发愁吗?速度慢不说,单线程操作还无法充分利用系统资源,眼睁睁看着硬盘没跑满,单个CPU核心却先到瓶颈了。
如果你在寻找一个现代化的替代方案,那么 cpx 这个用 Rust 重写的文件复制工具,或许能成为你的新选择。它自称是“重新构想的 cp”,核心目标就是利用多线程和现代 Linux 内核特性,把复制速度提上去,并且贴心地加上了进度条和断点续传功能。

核心功能亮点
cpx 对标的是 ripgrep、fd 这类由 Rust 构建的现代命令行工具,其特性相当实用:
- 极速并行复制:基于 Rust 的
Rayon 数据并行库进行多线程计算。官方数据显示,复制海量小文件时,速度可比传统单线程 cp 命令快上数倍。
- 可视化进度条:借助
indicatif 库提供实时、美观的进度条,让你能清晰掌握复制进度、传输速度、已用时间和剩余时间,告别盲等。
- 断点续传:这是
cp 命令不具备的能力。如果复制过程被意外中断(比如按了 Ctrl+C),cpx 支持从中断点恢复任务,并通过校验和确保文件完整性,非常可靠。
- 智能过滤:支持类似
.gitignore 的排除模式,可以很方便地在复制时忽略 node_modules、.git 等目录,避免复制不必要的文件。
- 安全与容错:
- 原子操作:能优雅地处理中断,避免产生不完整的中间文件。
- 自动备份:提供选项在覆盖前备份目标位置已存在的文件。
- 底层优化:充分利用了 Linux 内核 (4.5+) 的
copy_file_range 系统调用,支持 CoW (写时复制) / Reflink 等技术,并对 SELinux 上下文和扩展属性做了适配优化。
性能基准测试
开发者给出了一些对比数据,能直观看出性能提升。例如,在复制包含约1.5万个文件的 VsCode 代码库时:
cpx 耗时:263ms
- 传统
cp 耗时:1084ms
性能提升约 4.12倍。在复制包含约6.5万个文件的 Rust 源码目录时,也有类似的显著提升。
安装与配置
环境要求
- 操作系统:目前仅支持 Linux。macOS 和 Windows 支持仍在计划中。
- 内核版本:最好在 4.5+ 以完全发挥
copy_file_range 的性能。
- 构建环境:如需从源码构建,需要 Rust 1.70+。
安装方式
你可以选择以下任一方式安装:
常用指令示例
cpx 的命令设计上尽量向 cp 靠拢,学习成本很低。
注意事项与局限性
在将 cpx 集成到你的工作流前,有几点需要了解:
- 平台限制:目前仅支持 Linux。如果你是 macOS 或 Windows 用户,需要等待后续版本更新。
- 开发阶段:当前最新版本为 v0.1.3(截至信息发布时),仍处于早期开发阶段。对于生产环境中涉及关键数据的复制操作,建议先充分测试,或继续使用更成熟的工具如
rsync。
- 参数差异:
cpx 不是 cp 命令的 1:1 兼容替代品(drop-in replacement)。它的参数集是重新设计的,虽然相似,但如果你打算在现有脚本中用它替换 cp,务必检查参数兼容性,尤其是在处理复杂选项时。
总结

对于经常需要在 Linux 服务器或开发机上处理大量小文件(如前端项目的 node_modules、构建产物、日志文件)的开发者或 运维 人员来说,cpx 是一个颇具吸引力的工具。其实时进度条能让漫长的等待过程变得可知可控,而断点续传功能则为大文件传输提供了额外的安心保障。
如果你对这个项目感兴趣,可以在 云栈社区 参与相关讨论。项目开源地址如下:
项目地址:https://github.com/11happy/cpx
|