技术解析

Linux 有什么方法可以使得 cp mv 文件的时候能够显示进度?(在终端下)
0
2021-07-21 06:00:53
idczone
除了MidnightCommander这种大奇葩……
//树莓派下启动mc太慢
rsync -aP

自己写代码 然后添加管道

alias cp="rsync -avz"

http://beatex.org/web/advancedcopy.html
其实可以自己写脚本实现的,不过效率会低很多



谢谢
我决定用 patch 过的版本……
http://beatex.org/web/advancedcopy.html
eye candy 赛高!

咳,我刚找到……还是谢谢了

犀利啊。

那不是我写的……

原来看过这个说法,想起来在window下面的“正在计算源文件大小……”计算了半天
---------------------------
为什么要避免在 cp 时显示进度条这种设计?
进度条显示依赖于两个关键,一是总工作量,一是当前进度量。 对于
wget 来说, 如果要获取的资源在头部有Content-Length, 那么它可以认为获得了“总工作量”, 而具体下载过程中下载了多个字节它是知道的,这种情况下得到进度百分比是轻负担的,可承受的。
对于wget获取一个使用http协议的URL来说, 如果Content-Length没有指定, 则wget 也无法获取总工作量, 它所能做的只是下载一点是一点,直到收到一个结束标志。而这种情况下即使wget也无法正确显示进度条。
注: Content-Length 头在Http协议中是可选的.
对 于cp -a 这样的任务来说, 可能很多用把它用作备份的手段, 执行这个命令一般都是大宗买卖, 源往往是一个目录。 而获取这样一个目录的总大小是可能但不可负担的,你可以du -csh /usr/src/linux 试试看。 在这段时间内你差不多可以复制完成了。
另一种情况, 即使要复制的源是单个的大文件,此时总工作量易于得到, 但整个copy 过程中每时每刻的工作进度则要通过不断地轮询目标文件的大小来实现。 这需要至少两个进程/线程来实现, 比较wget在内部获得这一指标来说, cost太大了。

pv: monitor progress of data through pipe

可能是Win下待久了……遇到长时间耗时任务就希望有个进度条……虽然纯粹是Eye Candy……对于任务的解决并没有任何作用……
同时这个使用环境是我在树莓派下复制一些大文件时用的……鉴于I/O不给力的缘故……所以希望有一个回显确定他没死掉……
我认为这种需求肯定是存在的……当然上面提到的问题也不可忽视……最好的选择是将进度条作为一个可选项存在,当用户需要时,呈现一个进度条(尽管造成了一定的性能损失),不用时则达到效率的最大化。
//顺便cp/mv的时候也可以在内部获得目标文件的大小的吧……

嗯啊,能有可选项最好

pv file.bin > file0.bin
rsync --progress

推荐使用OmegaT http://www.omegat.org/zh_CN/omegat.html
基于JAVA的辅助翻译软件。自带原生字典以及各个翻译引擎的接口。
用来翻译过几个文档,感觉还不错。
感觉如果专业词汇比较多,还是灵格斯的专业词典比较靠谱

pipe 给 pv 或者用 rsync -av --progress --stats src dest
个人推荐后者

pycp 不就是用来干这个的么……

那在windows下进度条的实现机制是什么呢?在性能优化的很多方面Linux都比Windows优秀的多,能不能参考win的进度条来实现Linux下cp或者wget进度条的显示呢?

Linux 哲学之一就是干简单的事,把简单的事干好;文件操作的命令只负责文件操作;看死没死掉,那就看进程去,或者看输出的文件列表

在xp下面复制大量文件会消耗事件在计算总大小上面
win7下好些 ,不知道用了什么方法

可以使用linux版本的beyond compare,我经常用这个同步文件,用来拷文件是有进度条的,当然这个是gui的了

现在Win8复制的实时进度做的比之前强了也不只是一点半点,不过Linux还是以效率为主,任务的进度可以通过其他的方法来看。。

有个命令行工具pcp,可以实现你这个要求。

是gcp,输入错了。

alias cp='rsync --progress'
嘿嘿嘿

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服