我将从最简单的方法开始,逐步介绍到更强大和灵活的解决方案。

使用 pv (Pipe Viewer) - 推荐
pv 是一个专门为在管道中显示数据传输进度而设计的工具,它非常轻量且易于使用。
安装 pv
如果你的系统上没有 pv,需要先安装它。
-
在 Debian / Ubuntu / Mint 上:
sudo apt update sudo apt install pv
-
在 CentOS / RHEL / Fedora 上:
(图片来源网络,侵删)sudo yum install pv # 或者对于较新版本 sudo dnf install pv
-
在 macOS 上 (使用 Homebrew):
brew install pv
使用 pv 显示进度
pv 的基本原理是,它先读取源文件,然后将数据“喂”给 cp 命令。
语法:
pv SOURCE_FILE | cp - /path/to/DESTINATION_FILE
pv SOURCE_FILE: 让pv读取源文件,并显示进度信息(如已传输字节数、速度、预计剩余时间)。- 管道,将
pv的输出(也就是文件内容)传递给下一个命令。 cp - -:cp命令从标准输入()读取数据,并将其写入到目标文件( 在这里代表目标文件名,但通常需要明确指定)。注意:在较新的cp版本中,可以直接写成cp - /path/to/DEST。
示例:
# 复制一个名为 large_file.iso 的文件到 /mnt/usb/ pv large_file.iso | cp - /mnt/usb/large_file.iso
运行后,你会看到类似这样的输出:
45.2MB 0:00:15 [3.00MB/s] [=========> ] 45% ETA 0:00:18
2MB: 已传输的字节数。0:00:15: 已用时间。[3.00MB/s]: 传输速度。[=========> ]: 可视化进度条。45%: 完成百分比。ETA 0:00:18: 预计还需要多少时间。
使用 rsync - 功能最强大
rsync 是一个用于文件同步和复制的极其强大的工具,它本身就内置了进度显示功能,并且比 cp 更灵活(可以断点续传)。
安装 rsync
rsync 通常在大多数 Linux 系统上默认已安装,如果没有,可以使用和 pv 类似的包管理器安装(apt install rsync, yum install rsync 等)。
使用 rsync 显示进度
语法:
rsync -avh --progress SOURCE DESTINATION
-a: 归档模式,相当于-rlptgoD的集合,非常适合复制文件和目录。-v: 详细模式,显示正在复制的文件。-h: 输出人类可读的数字(1K, 234M, 2G)。--progress: 显示每个文件的传输进度,这是关键选项。
示例:
# 复制一个目录及其内容 rsync -avh --progress /path/to/source_directory/ /path/to/destination_directory/ # 复制单个文件 rsync -avh --progress large_file.iso /mnt/usb/
rsync 的进度信息非常详细,会显示当前正在传输的文件名、已传输字节数、速度和百分比。
使用 cp 的 --progress 选项 (现代版 GNU Coreutils)
如果你使用的是较新版本的 GNU Coreutils(通常在较新的 Linux 发行版中,如 Ubuntu 22.04+, Debian 12+, Fedora 37+ 等),cp 命令本身就带有一个 --progress 选项。
检查你的 cp 版本
在终端运行 cp --version,如果看到类似 cp (GNU coreutils) 8.32 或更高版本,说明支持。
使用 cp --progress
语法:
cp -av --progress SOURCE DESTINATION
-v: 结合--progress可以让你看到正在处理哪个文件。--progress: 显示每个文件的传输进度。
示例:
# 复制单个文件 cp --progress large_file.iso /mnt/usb/ # 复制整个目录(需要加上 -r 或 -a 选项) cp -a --progress -v /path/to/source_directory/ /path/to/destination_directory/
这个方法最简单,因为它不需要安装任何额外的软件,但请注意,它的进度信息可能没有 pv 或 rsync 那么丰富(通常不显示总预计时间)。
使用 progress - 跟踪系统中的所有复制操作
progress 是一个有趣的工具,它不直接执行 cp,而是监控系统上正在运行的 cp, mv, dd, tar, rsync, scp 等命令,并为它们显示一个统一的进度条。
安装 `progress**
-
在 Debian / Ubuntu / Mint 上:
sudo apt install progress
-
在 macOS 上 (使用 Homebrew):
brew install coreutils # progress 在 coreutils 包中
使用 progress
安装后,你只需要正常执行 cp 命令,然后在另一个终端窗口运行 progress 即可。
步骤:
- 终端 1: 执行你的复制任务。
cp -r /large/folder /destination/
- 终端 2: 运行
progress命令。progress
你会看到一个列表,显示所有正在进行的文件操作及其进度。
这种方法的好处是,你可以用一个命令监控多个任务,非常方便。
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
pv |
轻量、专注、进度信息丰富(ETA等) | 需要额外安装 | 单个或少量大文件复制,需要精确预估时间。 |
rsync |
功能最强大(断点续传、远程同步)、进度信息好 | 功能可能过于复杂,对新手不友好 | 复制目录、远程文件同步、需要可靠性的场景。 |
cp --progress |
最简单,无需安装新软件 | 仅在新版 GNU Coreutils 中可用,进度信息相对简单 | 使用新版 Linux 系统,需要快速查看单个文件复制进度。 |
progress |
可监控所有系统文件操作 | 不能直接启动任务,需要两个终端窗口 | 需要同时跟踪系统上多个文件操作进度的用户。 |
推荐方案
- 如果你只想显示
cp的进度且不想安装新软件:先检查cp --version,如果支持,直接使用cp --progress。 - 如果你追求最佳体验和功能:强烈推荐使用
rsync,它是系统管理员和高级用户的瑞士军刀。 - 如果你只是偶尔需要,且不想记
rsync的复杂参数:pv是一个非常棒的选择,简单直接,效果很好。
