Linux 有什么方法可以使得 cp mv 文件的时候能够显示进度?(在终端下)

2013-07-28 19:55:12 +08:00
 pandada8
除了MidnightCommander这种大奇葩……
//树莓派下启动mc太慢
47609 次点击
所在节点    Linux
25 条回复
reusFork
2013-07-28 20:02:02 +08:00
rsync -aP
kqz901002
2013-07-28 20:02:26 +08:00
自己写代码 然后添加管道
reusFork
2013-07-28 20:03:33 +08:00
alias cp="rsync -avz"
rrfeng
2013-07-28 20:04:12 +08:00
http://beatex.org/web/advancedcopy.html
其实可以自己写脚本实现的,不过效率会低很多
pandada8
2013-07-28 20:05:00 +08:00
@reusFork
@kqz901002
谢谢
我决定用 patch 过的版本……
http://beatex.org/web/advancedcopy.html
eye candy 赛高!
pandada8
2013-07-28 20:06:14 +08:00
@rrfeng 咳,我刚找到……还是谢谢了
ted05
2013-07-28 22:02:05 +08:00
@rrfeng 犀利啊。
rrfeng
2013-07-29 08:11:52 +08:00
@ted05 那不是我写的……
ksc010
2013-07-29 09:12:31 +08:00
原来看过这个说法,想起来在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太大了。
seraphimhj
2013-07-29 15:43:46 +08:00
pv: monitor progress of data through pipe
pandada8
2013-07-29 16:06:43 +08:00
@ksc010 可能是Win下待久了……遇到长时间耗时任务就希望有个进度条……虽然纯粹是Eye Candy……对于任务的解决并没有任何作用……

同时这个使用环境是我在树莓派下复制一些大文件时用的……鉴于I/O不给力的缘故……所以希望有一个回显确定他没死掉……

我认为这种需求肯定是存在的……当然上面提到的问题也不可忽视……最好的选择是将进度条作为一个可选项存在,当用户需要时,呈现一个进度条(尽管造成了一定的性能损失),不用时则达到效率的最大化。

//顺便cp/mv的时候也可以在内部获得目标文件的大小的吧……
ksc010
2013-07-29 16:12:02 +08:00
@pandada8 嗯啊,能有可选项最好
yaroot
2013-07-29 16:14:00 +08:00
pv file.bin > file0.bin
rsync --progress
roricon
2013-07-29 16:35:13 +08:00
推荐使用OmegaT http://www.omegat.org/zh_CN/omegat.html
基于JAVA的辅助翻译软件。自带原生字典以及各个翻译引擎的接口。

用来翻译过几个文档,感觉还不错。
感觉如果专业词汇比较多,还是灵格斯的专业词典比较靠谱
terry
2013-07-30 13:45:00 +08:00
pipe 给 pv 或者用 rsync -av --progress --stats src dest

个人推荐后者
ivenvd
2013-07-30 13:56:43 +08:00
pycp 不就是用来干这个的么……
Chrics
2013-08-28 01:57:09 +08:00
@ksc010 那在windows下进度条的实现机制是什么呢?在性能优化的很多方面Linux都比Windows优秀的多,能不能参考win的进度条来实现Linux下cp或者wget进度条的显示呢?
acecode
2013-08-28 19:29:02 +08:00
Linux 哲学之一就是干简单的事,把简单的事干好;文件操作的命令只负责文件操作;看死没死掉,那就看进程去,或者看输出的文件列表
ksc010
2013-08-29 09:35:52 +08:00
@Chrics 在xp下面复制大量文件会消耗事件在计算总大小上面
win7下好些 ,不知道用了什么方法
clino
2013-08-29 10:41:38 +08:00
可以使用linux版本的beyond compare,我经常用这个同步文件,用来拷文件是有进度条的,当然这个是gui的了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/77246

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX