cp复制文件时如何显示传输进度和速度?

cp复制文件时如何显示传输进度和速度?

否则,是否有其他命令行实用程序可以实现这一点?

答案1

没有。请参阅这里至于为什么。虽然它的功能比你需要的要多,但它rsync有一个--progress参数。它将-a保留权限等,并且-h将是人类可读的。

rsync -ah --progress source destination

输出将会像这样:

Pictures/1.jpg
      2.13M 100%    2.28MB/s    0:00:00 (xfr#5898, to-chk=1/5905)
Pictures/2.jpg
      1.68M 100%    1.76MB/s    0:00:00 (xfr#5899, to-chk=0/5905)

答案2

虽然cp没有此功能,但是您可以使用pv它来执行此操作:

pv my_big_file > backup/my_big_file

注意:此方法将丢失文件的权限和所有权。通过此方法复制的文件将具有与您自己创建的文件相同的权限,并且将属于您。

在此示例中,pv基本上只是将文件输出到 stdout*,您可以使用运算符将​​其重定向到文件>。同时,当您执行此操作时,它会将有关进度的信息打印到终端。

它看起来是这样的:

stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
 138MB 0:00:01 [73.3MB/s] [=================================>] 100% 

您可能需要安装 pv(或者,sudo apt-get install pv在您的系统上输入)。


*:技术层面

在类 Unix 系统中,有三种重要的数据流:stdout(标准输出)、stderr(标准错误)和 stdin(标准输入)。可以说,每个程序都有这三种数据流。重定向运算>符将程序输出重定向到文件。如上所示,不带参数时,>重定向程序的标准输出到一个文件。cp基本上没有什么比

cat source > destination

(其中cat仅读取文件并将其打印到标准输出)。pv就像 cat,但是如果您将其输出流重定向到其他位置,它会将进度信息打印到标准输出。

查看man pv并了解更多相关信息。


另一种选择是,正如 DoR 建议的那样这个答案,而是使用 rsync:

$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
        621.22M  57%  283.86MB/s    0:00:01

这将在显示进度的同时保留文件的权限/所有权。

答案3

我很喜欢使用 cURL 来实现这个目的。手册页列出了受支持的“FILE”协议,因此只需像在 URL 中任何其他协议一样使用它即可:

curl -o destination FILE://source

速度、进度、剩余时间等等——全部采用熟悉的格式。

答案4

存储库中有一个名为的工具progress,可以检查各种不同的命令并显示它们的进度信息。

使用命令安装

sudo apt-get install progress

此工具可以这样使用:

cp bigfile newfile & progress -mp $!

输出:

[11471] cp /media/Backup/Downloads/FILENAME.file 
        29.9% (24.2 MiB / 16 MiB)

相关内容