找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2883

积分

0

好友

382

主题
发表于 9 小时前 | 查看: 1| 回复: 0

还在为 cp -r 复制像 node_modules 或大型代码库这样包含海量小文件的目录而发愁吗?速度慢不说,单线程操作还无法充分利用系统资源,眼睁睁看着硬盘没跑满,单个CPU核心却先到瓶颈了。

如果你在寻找一个现代化的替代方案,那么 cpx 这个用 Rust 重写的文件复制工具,或许能成为你的新选择。它自称是“重新构想的 cp”,核心目标就是利用多线程和现代 Linux 内核特性,把复制速度提上去,并且贴心地加上了进度条和断点续传功能。

cpx命令行复制文件带进度条演示

核心功能亮点

cpx 对标的是 ripgrepfd 这类由 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+。

安装方式

你可以选择以下任一方式安装:

  • 使用 Cargo (推荐 Rust 用户):
    cargo install cpx
  • 使用官方脚本
    curl -sSL https://raw.githubusercontent.com/11happy/cpx/main/install.sh | sh
  • 直接下载二进制:从 GitHub Releases 页面下载预编译的二进制文件。

常用指令示例

cpx 的命令设计上尽量向 cp 靠拢,学习成本很低。

  • 基本文件复制
    cpx source.txt dest.txt
  • 递归复制目录
    cpx -r source_dir/ dest_dir/
  • 复制时排除特定目录
    cpx -r -e “node_modules” -e “.git” source_dir/ dest_dir/
  • 高级参数
    • -j <N>:手动指定并行工作的线程数。
    • --resume:恢复一个之前被中断的复制任务。
    • -p / --preserve:保留文件的模式、所有权、时间戳等属性。
    • -b:在覆盖前,备份目标位置已存在的文件。
    • --reflink:控制是否使用写时复制(CoW)功能。

注意事项与局限性

在将 cpx 集成到你的工作流前,有几点需要了解:

  1. 平台限制:目前仅支持 Linux。如果你是 macOS 或 Windows 用户,需要等待后续版本更新。
  2. 开发阶段:当前最新版本为 v0.1.3(截至信息发布时),仍处于早期开发阶段。对于生产环境中涉及关键数据的复制操作,建议先充分测试,或继续使用更成熟的工具如 rsync
  3. 参数差异cpx 不是 cp 命令的 1:1 兼容替代品(drop-in replacement)。它的参数集是重新设计的,虽然相似,但如果你打算在现有脚本中用它替换 cp,务必检查参数兼容性,尤其是在处理复杂选项时。

总结

cpx断点续传功能演示

对于经常需要在 Linux 服务器或开发机上处理大量小文件(如前端项目的 node_modules、构建产物、日志文件)的开发者或 运维 人员来说,cpx 是一个颇具吸引力的工具。其实时进度条能让漫长的等待过程变得可知可控,而断点续传功能则为大文件传输提供了额外的安心保障。

如果你对这个项目感兴趣,可以在 云栈社区 参与相关讨论。项目开源地址如下:

项目地址https://github.com/11happy/cpx




上一篇:Linux运维春节自学计划:三个方向融合AI技能,实用不内卷
下一篇:120W快充拆解实录:3.6元包邮的真伪鉴别与安全隐患分析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-9 20:14 , Processed in 0.385696 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表