AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 17275
Accepted
Olivier Lalonde
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 24 个回答
  • 886266 Views

24 个回答

  • Voted
  1. 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
    

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

    • 383
  2. 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)
    
    • 377
  3. 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.

    • 111
  4. mathemagician
    2013-02-03T01:00:54+08:002013-02-03T01:00:54+08:00

    为了这个确切的目的,我很高兴使用 cURL。手册页列出了支持的“FILE”协议,因此只需像在 URL 中使用任何其他协议一样使用它:

    curl -o destination FILE://source
    

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

    • 103
  5. 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)
    
    • 53
  6. Ubuntourist
    2010-12-15T09:17:15+08:002010-12-15T09:17:15+08:00

    虽然它不显示速度,但在复制多个文件时,-v该命令的选项cp将为您提供进度信息。例如

    cp -rv old-directory new-directory
    
    • 38
  7. 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)
    ...
    
    • 20
  8. 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
    
    • 14
  9. 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" 时一样)。

    • 12
  10. 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 的进度?

    • 11

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve