Olivier Lalonde Asked: 2010-12-14 20:48:30 +0800 CST2010-12-14 20:48:30 +0800 CST 2010-12-14 20:48:30 +0800 CST cp复制文件时如何显示传输进度和速度? 772 否则,是否有任何替代命令行实用程序可以实现此目的? command-line coreutils 24 个回答 Voted Best Answer Stefano Palazzo 2010-12-14T21:17:16+08:002010-12-14T21:17:16+08:00 虽然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 一样,但是如果你将它的输出流重定向到其他地方,它会将进度信息打印到 stdout。 看看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 这将在显示进度的同时保留文件权限/所有权。 bartekbrak 2012-10-16T00:06:08+08:002012-10-16T00:06:08+08:00 没有。请参阅此处了解原因。虽然它比你需要的更多,但它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) user76204 2012-10-16T03:09:12+08:002012-10-16T03:09:12+08:00 如果您想查看您的文件是否正确传输,您可以使用它gcp,gcp就像 cp 但默认情况下会为您提供一个进度条,以便您可以看到正在复制的内容。正如该程序的wiki 注释,gcp具有几个有用的功能,例如 转移进度指示 出错时连续复制(跳到下一个文件) 复制状态记录:gcp 记录其所有操作,以便可以知道哪些文件已成功复制 名称修改以处理目标文件系统限制(例如删除 FAT 上的不兼容字符“*”或“?”) 但是,即使在使用该工具时进度条已达到 100%,您也必须等到终端提示再次出现,然后才能安全移除媒体,以确保传输过程已成功完成。 gcp用于复制文件并具有诸如--preserve可以保留各种属性和权限以及--recursive可以复制整个目录之类的选项。可以通过输入man gcp或转到Ubuntu 联机帮助页找到有关其选项的更多信息。该站点上还提供了教程。 gcp从存储库安装 sudo apt-get install gcp (注意:在 Ubuntu 12.10 中,新的自动挂载点是,例如,/media/user/usbdisk) 您可以通过输入将文件复制到您的媒体 gcp /home/mike/file.mp4 /media/usb 并将文件夹复制到您的媒体 gcp -rv ~/Podcasts /media/Mik2 gcp带有进度条的示例输出: gcp ~/Videos_incIplayer/mars.flv /media/Mik2 Copying 168.57 MiB 100% |########################################################| 7.98 M/s Time: 00:00:22 当然,您可以指定多个文件或文件夹复制到您的磁盘,还有很多其他选项包含在man gcp. mathemagician 2013-02-03T01:00:54+08:002013-02-03T01:00:54+08:00 为了这个确切的目的,我很高兴使用 cURL。手册页列出了支持的“FILE”协议,因此只需像在 URL 中使用任何其他协议一样使用它: curl -o destination FILE://source 速度、进度、剩余时间等 - 全部采用熟悉的格式。 Nathaniel A Malinowski 2016-09-27T14:35:22+08:002016-09-27T14:35:22+08:00 存储库中有一个工具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) Ubuntourist 2010-12-15T09:17:15+08:002010-12-15T09:17:15+08:00 虽然它不显示速度,但在复制多个文件时,-v该命令的选项cp将为您提供进度信息。例如 cp -rv old-directory new-directory Jürgen Weigert 2014-02-26T06:34:32+08:002014-02-26T06:34:32+08:00 内核知道大部分数据,例如速度,通常还知道百分比。现代内核通过其 /proc 文件系统公开了这一点。 来自https://github.com/jnweiger/showspeed的showspeed使用该信息。它可以附加到已经运行的程序并定期更新,如下所示: $ dd if=bigfile of=/tmp/otherbigfile & $ showspeed dd dd looks like a process name. pid=4417 matches av0=dd. p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB) 9m:35 p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB) p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB) 8m:08 p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB) 8m:01 p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB) 7m:39 p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB) p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB) 7m:37 p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB) 7m:18 p/4417/fd/1w /tmp/otherbigfile 67MB/s (4.0GB) p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB) ... onemach 2013-01-06T00:08:23+08:002013-01-06T00:08:23+08:00 虽然pv可以处理本地cp任务,但使用ddwithpv可以处理本地(cp)和远程(scp)任务。 dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv 请确保path/to/dest.mkv出口由touch path/to/dest.mkv 这可以显示进度,但是如果您想要百分比信息, dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv 将100M上面替换为源文件的实际大小。 远程部分来了 虽然scp很难显示当前的进度,但使用ddwithpv是小菜一碟。 ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv S Lentz 2016-03-03T14:22:49+08:002016-03-03T14:22:49+08:00 如果您有 rsync 3.1 或更高版本rsync --version(非常粗略)估计剩余时间: sudo rsync -a --info=progress2 --no-i-r /source /destination 请注意,仅在处理您不拥有的目录/文件时才需要 sudo。此外,如果没有--no-i-r,百分比可能会在复制期间的某个时间点重置为较低的数字。也许更高版本的 rsync 将默认为 no-ir,info=progress2,但在当前版本的 3.1.2 中没有。 我发现在复制到已经包含文件的目录时,剩余的百分比和时间被严重高估了(即,就像您通常使用 cp -n "no clobber" 时一样)。 Ciro Santilli OurBigBook.com 2016-09-15T08:18:56+08:002016-09-15T08:18:56+08:00 dd status=progress GNU Coreutils 8.24+ (Ubuntu 16.04) 中添加的选项: dd if=src of=dst status=progress 终端显示一行类型: 462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s 定期更新。 另请参阅:您如何监控 dd 的进度?
虽然
cp
没有此功能,但您可以使用pv
:注意:此方法将失去文件的权限和所有权。以这种方式复制的文件将具有与您自己创建的文件相同的权限,并且属于您。
在此示例中,
pv
基本上只是将文件输出到 stdout*,然后使用>
运算符将其重定向到文件。同时,它会在您执行此操作时将有关进度的信息打印到终端。这是它的样子:
您可能需要在您的系统上 安装 pv(或者,键入
sudo apt-get install pv
)。*:技术位
在类 Unix 系统中存在三个重要的数据流:stdout(标准输出)、stderr(标准错误)和 stdin(标准输入)。每个程序都有这三个,可以这么说。
>
重定向运算符将程序输出重定向到文件。如您在上面看到的,不带参数>
将程序的标准输出重定向到文件。cp
基本上没有什么比(
cat
只是读取一个文件并将其打印到标准输出)。pv
就像 cat 一样,但是如果你将它的输出流重定向到其他地方,它会将进度信息打印到 stdout。看看
man pv
以了解更多信息。正如DoR在此答案中建议的那样,另一种选择是使用 rsync 代替:
这将在显示进度的同时保留文件权限/所有权。
没有。请参阅此处了解原因。虽然它比你需要的更多,但它
rsync
有一个--progress
参数。将-a
保留权限等,并且-h
将是人类可读的。输出将如下所示:
如果您想查看您的文件是否正确传输,您可以使用它
gcp
,gcp
就像 cp 但默认情况下会为您提供一个进度条,以便您可以看到正在复制的内容。正如该程序的wiki 注释,gcp
具有几个有用的功能,例如但是,即使在使用该工具时进度条已达到 100%,您也必须等到终端提示再次出现,然后才能安全移除媒体,以确保传输过程已成功完成。
gcp
用于复制文件并具有诸如--preserve
可以保留各种属性和权限以及--recursive
可以复制整个目录之类的选项。可以通过输入man gcp
或转到Ubuntu 联机帮助页找到有关其选项的更多信息。该站点上还提供了教程。gcp
从存储库安装(注意:在 Ubuntu 12.10 中,新的自动挂载点是,例如,
/media/user/usbdisk
)您可以通过输入将文件复制到您的媒体
并将文件夹复制到您的媒体
gcp
带有进度条的示例输出:当然,您可以指定多个文件或文件夹复制到您的磁盘,还有很多其他选项包含在
man gcp
.为了这个确切的目的,我很高兴使用 cURL。手册页列出了支持的“FILE”协议,因此只需像在 URL 中使用任何其他协议一样使用它:
速度、进度、剩余时间等 - 全部采用熟悉的格式。
存储库中有一个工具
progress
可以检查各种不同的命令并显示它们的进度信息。使用命令安装它
这个工具可以这样使用:
输出:
虽然它不显示速度,但在复制多个文件时,
-v
该命令的选项cp
将为您提供进度信息。例如内核知道大部分数据,例如速度,通常还知道百分比。现代内核通过其 /proc 文件系统公开了这一点。
来自https://github.com/jnweiger/showspeed的showspeed使用该信息。它可以附加到已经运行的程序并定期更新,如下所示:
虽然
pv
可以处理本地cp
任务,但使用dd
withpv
可以处理本地(cp
)和远程(scp
)任务。请确保
path/to/dest.mkv
出口由touch path/to/dest.mkv
这可以显示进度,但是如果您想要百分比信息,
将
100M
上面替换为源文件的实际大小。远程部分来了
虽然
scp
很难显示当前的进度,但使用dd
withpv
是小菜一碟。如果您有 rsync 3.1 或更高版本
rsync --version
(非常粗略)估计剩余时间:请注意,仅在处理您不拥有的目录/文件时才需要 sudo。此外,如果没有
--no-i-r
,百分比可能会在复制期间的某个时间点重置为较低的数字。也许更高版本的 rsync 将默认为 no-ir,info=progress2,但在当前版本的 3.1.2 中没有。我发现在复制到已经包含文件的目录时,剩余的百分比和时间被严重高估了(即,就像您通常使用 cp -n "no clobber" 时一样)。
dd status=progress
GNU Coreutils 8.24+ (Ubuntu 16.04) 中添加的选项:
终端显示一行类型:
定期更新。
另请参阅:您如何监控 dd 的进度?