You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Linux复制大文件时创建进度条?

在Linux中复制大文件并显示进度条的实用方案

嘿,我来给你几个靠谱的办法,让你在复制大文件时能直观看到进度,不管是想要详细的进度条还是像你示例里那种动态的点,都能搞定~

1. 用pv工具(最灵活的进度显示)

pv(Pipe Viewer)是专门用来监控管道数据传输进度的工具,功能非常全,能显示百分比、传输速度、剩余时间,甚至可以自定义输出样式。

首先得安装它:

  • Debian/Ubuntu系:sudo apt install pv
  • CentOS/RHEL系:sudo dnf install pv(旧版本用yum也可以)

基础用法(详细进度)

复制单个文件时,直接把pv放在输入和输出之间:

pv large_file.iso > /path/to/destination/large_file.iso

执行后你会看到类似这样的实时更新:

1.23GiB 0:00:15 [83.2MiB/s] [===================> ] 75% ETA 0:00:05

自定义成“点”式进度(贴近你的示例)

如果就想要那种每隔一段时间输出一个点的效果,可以调整pv的参数:

pv -q -L 1 large_file.iso > /path/to/destination/large_file.iso

-q是静默模式,-L 1用来控制点的输出频率,每秒一个)

2. 用rsync(系统自带,无需额外安装)

大部分Linux系统默认都装了rsync,它自带的--progress参数就能完美显示复制进度,还支持断点续传,特别适合大文件和跨机器复制。

用法很简单:

rsync --progress large_file.iso /path/to/destination/

输出会实时更新,显示当前复制的文件名、已复制大小、进度百分比、传输速度和剩余时间:

large_file.iso
1,288,490,188 75% 82.3MB/s 0:00:05

3. 用GNU cp--progress参数

如果你用的是GNU版本的cp(大部分主流发行版都是),直接加--progress参数就能显示进度:

cp --progress large_file.iso /path/to/destination/

它会显示复制的文件大小、已完成的百分比,以及一个简单的进度条:

copying to `/path/to/destination/large_file.iso'
1.2GiB 75% 80.0MB/s 0:00:05

4. 自定义bash脚本实现“点”式进度(完全匹配你的示例)

如果你就想要像copy file > file1 .........这种逐点输出的效果,可以自己写个简单的bash脚本:

#!/bin/bash

# 定义带点式进度的复制函数
copy_with_dots() {
    # 输出开头提示,不换行
    echo -n "copy $1 > $2 "
    # 后台执行复制命令
    cp "$1" "$2" &
    # 获取复制进程的PID
    COPY_PID=$!
    # 循环检查进程是否运行
    while kill -0 "$COPY_PID" 2>/dev/null; do
        # 每隔1秒输出一个点
        echo -n "."
        sleep 1
    done
    # 复制完成后换行提示
    echo " done!"
}

# 调用示例
copy_with_dots "file" "file1"
copy_with_dots "moon" "mars"

把这段代码保存成copy_with_progress.sh,给它加执行权限:

chmod +x copy_with_progress.sh

运行后就能看到和你示例几乎一样的效果:

copy file > file1 .......... done!
copy moon > mars ........ done!

小提示

  • 脚本里用kill -0只是检查进程状态,不会真的杀死进程
  • 变量用双引号包裹,能处理文件名带空格的情况

内容的提问来源于stack exchange,提问作者yael

火山引擎 最新活动