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

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

我需要在我的 Linux 机器上复制大文件。

例子:

cp source.txt target.txt

我想创建进度条,以显示每个副本文件上的副本仍在进行中

例子”

cp file file1

复制文件 > 文件 1 ……

cp moon mars

复制月球 > 火星......

答案1

简而言之,您找不到cp进度条输出的本机功能。为什么? 很多原因。但是,您有一些选择:

  1. 使用不同的工具。 rsync,正如 @user1404316 所提到的--progress

    rsync -P largeFile copyLocation
    
  2. 如果您不需要额外的语义,cp请通过重定向使用(“Pipe Viewer”)rsync创建一个新文件:pvstdout

    pv < largeFile > copyLocation
    
  3. 如果你需要额外的语义,您可以使用progress,尽管它没有具体给出该栏。它附加到已经运行进程,因此您可以像这样调用它:

    # In one shell
    $ cp largeFile copyLocation
    
    # In another shell
    $ progress -m
    [ 4714] cp /home/hunteke/largeFile
            1.1% (114 MiB / 10.2 GiB)      # -m tells progress to continually update
    
  4. 另一个选项是gcp,它完全按照您对进度条的要求进行操作:

    gcp largeFile copyLocation
    
  5. 另一个选项滥用了curl处理file://url 的能力:

    curl -o copyLocation file:///path/to/largeFile
    
  6. 你可以写一个shell脚本

答案2

rsync是一个复制程序,具有复制大文件的强大功能,其中包括一个--progress功能,并且它具有一种传输中压缩形式,可以减少传输中的数据(从而节省复制时间):

rsync --progress file1 file2

rsync还具有恢复可能由于网络断开而中断的副本的功能。您需要使用 options 来启动它--partial --append-verify。我能想到的用于通过网络复制的唯一缺点rsync是它需要安装在两台计算机上,即。发送者和接收者。man有关详细信息和所有其他功能,请参阅其页面...

如果您由于某种原因无法安装rsync,或者不想安装,一个很好的简单替代方案pv管道观察器命令,这正是您所要求的。

pv from-file > to-file

pv还包括许多可视化选项。请参阅其man页面以了解所有可用的好东西。以下是一些常用的选项:

-p, --progress
-t, --timer
-e, --eta
-r, --rate
-a, --average-rate
-b, --bytes

相关内容