一、原生替代方案
1. rsync
命令(推荐)
- 功能特性:支持实时进度条、传输速率、剩余时间预估,且保留文件属性(权限/时间戳)。
- 命令示例:
rsync -ah --progress source_file destination/
-a
:归档模式(保留元数据)-h
:人类可读单位(如 MB/s)--progress
:显示进度信息
- 输出示例:
source_file 100% 500MB 50.3MB/s 00:00:10
2. dd
命令 + status=progress
- 适用场景:块级复制大文件时显示进度。
- 命令示例:
dd if=source.img of=/dev/sdX bs=4M status=progress
- 特点:仅显示当前块传输进度,适合低级别操作。
二、进度监控工具
1. pv
管道查看器
- 安装方法:
sudo apt install pv # Debian/Ubuntu sudo yum install pv # CentOS/RHEL
- 使用方式:
pv source_file > destination_file
- 高级用法(结合
cp
):cp -r dir | pv -lep -s $(du -sb dir | awk '{print $1}') > /dev/null
-l
:按行计数-e
:估算剩余时间-p
:显示进度条-s
:指定总大小
- 高级用法(结合
2. progress
工具
- 功能:实时监控正在运行的
cp
进程。 - 操作步骤:
sudo apt install progress # 安装工具 progress -M # 监控所有复制进程
- 输出示例:
[12345] cp /source /dest 75% (3.2GiB/4.2GiB) 120MB/s 00:00:27 ETA
三、其他实用方法
1. 图形化界面
- GNOME/Nautilus:直接拖拽文件时显示进度弹窗。
- KDE Dolphin:内置传输进度条。
2. 脚本化方案
- 使用
watch
命令:watch -n 1 'du -sh destination_dir'
- 每秒刷新目标目录大小,估算进度。
3. 自定义别名
- 在
.bashrc
中添加:alias cpr='rsync -ah --progress'
- 之后使用
cpr
命令即可显示进度。
- 之后使用
四、方法对比
方案 | 进度精度 | 安装需求 | 适用场景 | 输出实时性 |
---|---|---|---|---|
rsync | 高 | 否 | 文件同步/备份 | 高 |
pv | 中 | 是 | 管道流式传输 | 高 |
progress | 中 | 是 | 监控已有 cp 进程 | 中 |
dd | 低 | 否 | 块设备复制 | 低 |
五、操作建议
- 优先选择
rsync
:功能最全面,无需额外安装。 - 管道场景用
pv
:适合脚本或自动化流程。 - 实时监控选
progress
:无需修改原命令,直接查看后台进程。
通过上述方法,可有效解决 cp
命令默认无进度反馈的问题,尤其适合大文件传输或批量复制操作。