菜鸟科技网

cp命令显示进度

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

cp命令显示进度-图1
(图片来源网络,侵删)

使用 pv (Pipe Viewer) - 推荐

pv 是一个专门为在管道中显示数据传输进度而设计的工具,它非常轻量且易于使用。

安装 pv

如果你的系统上没有 pv,需要先安装它。

  • 在 Debian / Ubuntu / Mint 上:

    sudo apt update
    sudo apt install pv
  • 在 CentOS / RHEL / Fedora 上:

    cp命令显示进度-图2
    (图片来源网络,侵删)
    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/

这个方法最简单,因为它不需要安装任何额外的软件,但请注意,它的进度信息可能没有 pvrsync 那么丰富(通常不显示总预计时间)。


使用 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. 终端 1: 执行你的复制任务。
    cp -r /large/folder /destination/
  2. 终端 2: 运行 progress 命令。
    progress

    你会看到一个列表,显示所有正在进行的文件操作及其进度。

这种方法的好处是,你可以用一个命令监控多个任务,非常方便。


总结与对比

方法 优点 缺点 适用场景
pv 轻量、专注、进度信息丰富(ETA等) 需要额外安装 单个或少量大文件复制,需要精确预估时间。
rsync 功能最强大(断点续传、远程同步)、进度信息好 功能可能过于复杂,对新手不友好 复制目录、远程文件同步、需要可靠性的场景。
cp --progress 最简单,无需安装新软件 仅在新版 GNU Coreutils 中可用,进度信息相对简单 使用新版 Linux 系统,需要快速查看单个文件复制进度。
progress 可监控所有系统文件操作 不能直接启动任务,需要两个终端窗口 需要同时跟踪系统上多个文件操作进度的用户。

推荐方案

  • 如果你只想显示 cp 的进度且不想安装新软件:先检查 cp --version,如果支持,直接使用 cp --progress
  • 如果你追求最佳体验和功能强烈推荐使用 rsync,它是系统管理员和高级用户的瑞士军刀。
  • 如果你只是偶尔需要,且不想记 rsync 的复杂参数pv 是一个非常棒的选择,简单直接,效果很好。
分享:
扫描分享到社交APP
上一篇
下一篇