• 首页
  • 狐文
  • 狐图
  • About
狐窝
OvO
  1. 首页
  2. 未分类
  3. 正文

Linux如何查看文件移动复制的进度

2020年09月10日 37点热度 1人点赞 0条评论

在最新版本的Mac OS X中,您只需按CTRL+ T即可查看进度。在OSX 10.6的cp(1)手册页中:

 "If cp receives a SIGINFO (see the status argument for stty(1)) signal,
 the current input and output file and the percentage complete will be
 written to the standard output."

点击CTRL+ T等同于在BSD-ish机器(包括OSX)上使用SIGINFO指示当前进程。

这也适用于dd(1)。

我不认为Linux具有这种SIGINFO机制,并且在cp(1)的GNU手册页中看不到任何有关可用于报告进度的信号的信息。

 

一个相对较新的工具,正是这么做的进步(原CV [coreutils的浏览器])。

它是什么?

该工具可以描述为Tiny,Dirty,仅Linux和OSX的C命令,用于查找当前在系统上运行的coreutils基本命令(cp,mv,dd,tar,gzip / gunzip,cat等)。显示复制数据的百分比。

它是如何工作的?

它仅扫描/proc感兴趣的命令,然后查看目录fd并fdinfo查找打开的文件并查找位置,并报告最大文件的状态。

 

您可以构建修补的cp和mv,然后都支持-g开关以显示进度。此页面上有说明和补丁。但是:该页面指示您执行操作

$ sudo cp src/cp /usr/bin/cp
$ sudo cp src/mv /usr/bin/mv

它会覆盖原始的cp和mv。这有两个缺点:首先,如果更新的coreutils软件包到达您的系统,则它们将被覆盖。其次,如果修补的版本有问题,它们可能会破坏依赖于标准cp和mv的脚本。我宁愿做这样的事情:

$ sudo cp src/cp /usr/local/bin/cpg
$ sudo cp src/mv /usr/local/bin/mvg

它将文件复制到/ usr / local / bin中,供用户编译的程序使用,并为它们指定一个不同的名称。因此,当您需要进度条时,请说出来mvg -g bigfile /mnt/backup并正常使用mv。

您也可以这样做alias mvg="/usr/local/mvg -g",只需要说mvg bigfile /mnt/backup并直接获得进度栏即可。

rsync:Rsync复制文件并具有一个-P用于进度条的开关。因此,如果安装了rsync,则可以在shells dotfile中使用一个简单的别名:

alias cp='rsync -aP'

缺点是,rsync比cp慢一点,但是您应该随时间测量并决定自己,我可以忍受它:-)

Shell脚本:Shell脚本也可以创建进度条。我前一段时间在网上找到了这个,我不记得来源了:

#!/bin/sh
cp_p()
{
   strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
      | awk '{
        count += $NF
            if (count % 10 == 0) {
               percent = count / total_size * 100
               printf "%3d%% [", percent
               for (i=0;i<=percent;i++)
                  printf "="
               printf ">"
               for (i=percent;i<100;i++)
                  printf " "
               printf "]\r"
            }
         }
         END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}

看起来像:

% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================>                      ]

酒吧:

'bar'-带有ASCII进度条的'cat'

bar是一个小的Shell脚本,用于显示所有类型的操作(cp,tar等)的进程栏。您可以在项目主页上找到示例。

它也为bourne shell编写,因此它将在附近运行。

请注意,这rsync并不能完全取代mv(OP在询问),尤其是在写入式复制文件系统(例如)上进行快速复制时btrfs。

 

有一个名为的新工具progress,可以找到与正在运行的命令相关的任何描述符,并显示进度和速度: 此处提供

progress -w

输出所有正在运行的cp,mv等操作的统计信息

您还watch可以说每2秒发生什么:watch progress -w
但是当移动一个包含许多文件的文件夹时,它仅显示当前文件的进度,而不显示整个文件夹的总数。作为替代,watch progress -w您也可以简单地使用progress -m

您可以使用管道查看器命令pv显示进度条:

pv /original/file > /new/file

我经常使用它通过已挂载的网络文件系统(与gzip和结合tar)复制大文件。缺点是您只能复制一个文件,而不能复制目录。而且,您必须给新文件起一个名字,而不能像给它一样给目标目录命名cp。但是,复制不是pv目的。它是一个功能强大的工具,不仅可以复制文件,还可以做更多的事情。有关的更多示例,请参见首页pv。

更好的选择是使用rsync -aP。如果要mv代替,请附加标志--remove-source-files。.bashrc如果要频繁使用以下命令,请将其添加到您的:

alias rscp='rsync -aP'
alias rsmv='rsync -aP --remove-source-files'

缺点是rsync仅显示进度,不显示进度栏。

tar cf - source-dir | pv | tar xf - -C out-dir将为您提供整个目录的吞吐量。如果您知道大小并传递-s给PV,它也可以为您带来进步。

 

为了避免coreutil修补,以进度条的增加mv和cp,gcp(戈菲的复印机)是一个新的选择:http://wiki.goffi.org/wiki/Gcp/en

cp与-r递归和-v详细说明选项使用相同的方式。

当同时调用多个命令时,它将使用文件队列。它还允许在日志中记录复制的文件名,有关详细信息,请参见“ 源保存手册”部分。

这是一个很好的入门指南gcp:http : //mylinuxbook.com/gcp-advanced-command-line-file-copier-inspired-by-cp/

 

通过对目标文件和本地文件运行stat并获取文件大小,

即 stat -c "%s" /bin/ls

通过比较这两个值,您可以获得复制数据的百分比,仅此而已

在一个非常基本的实现中,它将如下所示:

function cpstat()
{
  local pid="${1:-$(pgrep -xn cp)}" src dst
  [[ "$pid" ]] || return
  while [[ -f "/proc/$pid/fd/3" ]]; do
    read src dst < <(stat -L --printf '%s ' "/proc/$pid/fd/"{3,4})
    (( src )) || break
    printf 'cp %d%%\r' $((dst*100/src))
    sleep 1
  done
  echo
}

资料:

https://qastack.cn/unix/2577/how-can-i-move-files-and-view-the-progress-e-g-with-a-progress-bar

https://qastack.cn/unix/66795/how-to-check-progress-of-running-cp

标签: cp linux siginfo
最后更新:2020年09月10日

OvO

狐狸

点赞
< 上一篇
下一篇 >
最新 热点 随机
最新 热点 随机
钛备份或小米系统备份功能备份出来的APK无法正常还原 BBR安装启用 安装docker mitmproxy 调试方法 Android SDK 版本选择 Perdition Mail代理服务器配置 HAProxy SSL代理 Openssl 中间人SSL代理 Stunnel SSL to SSL代理 NGINX反代IMAP配置 各种设备User Agent Torrent下载工具推荐 用 rar2john+hashcat 破解 RAR 文件密码 2020最好的Linux发行版 关闭新版chrome工具栏上拼图图标 Office 下载、安装、激活,有它就够了! Android 非官方的发行版 openwrt添加autoconf-archive
ubuntu10.04等官方原版如何添加Back Track 5等其它ubuntu衍生版的源 设立Hyper-V和VMware多个服务之间共存 Android 屏幕适配经验总结 Pureftpd FTP登陆错误问题处理 VMware虚拟机磁盘操作占用过高问题 你不应该错过的12款Linux桌面环境 Linux Mint 安装JDK MyBatis批量插入数据 Selenium实现元素的拖拽(java版) SQL Server中利用正则表达式替换字符串的方法 关于FreeNAS是否适合虚拟化的讨论 nginx location匹配规则 网页工程师一定要知道的 14 个超棒 HTML/CSS 框架 卸载linux Mint自带jdk并安装最新jdk 简单的manjaro安装powerline及vim zsh配置 pyCharm中python对象的自动提示问题 adb以root权限登录,并修改system为读写权限 Linux下查看SSD4K对齐EXT4分区开启Trim及验证的方法
标签聚合
linux 下载 ssl 路由 镜像 git chromium yum 安装 https chrome 密码 blog 网卡 e docker

COPYRIGHT © 2020 狐窝. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS