LinuxSir.Org  
| 网站首页 | 注册账号 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
精华主题  
主题工具
旧 03-07-03, 11:20 第 1 帖
gybcb
 
 
 
注册会员  
  注册日期: Mar 2003
  帖子: 45
  精华: 1
 

标题: 怎么让cp显示拷贝的进度或者速度?


怎么让cp显示拷贝的进度或者速度?
  gybcb 当前离线   回复时引用此帖
旧 03-07-03, 11:53 第 2 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

这个需要写一个进度条的脚本,脚本区里有如何写进度条的例子,你看看!
http://www.linuxsir.com/bbs/showthre...threadid=29701
  KornLee 当前离线   回复时引用此帖
旧 03-07-03, 12:41 第 3 帖
gybcb
 
 
 
注册会员  
  注册日期: Mar 2003
  帖子: 45
  精华: 1
 

那个脚本只是画一个进度条而已!
我怎么知道文件实际拷贝了多少呢?
  gybcb 当前离线   回复时引用此帖
旧 03-07-03, 13:01 第 4 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

:(,
思路应该是这样的吧~
首先计算要拷贝的文件的整个块的大小,然后按照百分比例分成n个小块,把这个n的数量交给类似dialog的程序处理,
(我也没有实现呢!望探讨)
  KornLee 当前离线   回复时引用此帖
旧 03-07-03, 13:16 第 5 帖
gybcb
 
 
 
注册会员  
  注册日期: Mar 2003
  帖子: 45
  精华: 1
 

如果用c/c++或者别的语言写得话的确是这样。
关键现在怎么样可以重用cp呢?
或者说cp也可以把一个文件分成几块分别拷贝?
(请指教)
  gybcb 当前离线   回复时引用此帖
旧 03-07-03, 14:33 第 6 帖
lucida
 
 
 
注册会员  
  注册日期: Oct 2002
  我的住址: .:DRL:.
  帖子: 2,492
  精华: 9
 

重写cp吧
好歹人家源程序都给你了。。







__________________
E6300@3.2G/P5B-D WiFi/2G RAM/1TB HDD/3540A/7900GT/E-MU 0404
Logitech S 510/MX Revolution/2407WFP/LaserJet 1020
go wild, go Gentoo
  lucida 当前离线   回复时引用此帖
旧 03-07-03, 14:44 第 7 帖
gybcb
 
 
 
注册会员  
  注册日期: Mar 2003
  帖子: 45
  精华: 1
 

我也这么想过!
不过....
(说来惭愧我没找到源码包)
:P
  gybcb 当前离线   回复时引用此帖
旧 03-07-03, 15:29 第 8 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

引用:
重写cp吧
好歹人家源程序都给你了。。
我个人看没那个必要吧!像dialog/Xdialog等工具都可以做到的(比如作些安装程序等)!但是为了显示一个进度条而改写cp,是不是舍简求繁了呢?!
  KornLee 当前离线   回复时引用此帖
旧 03-07-03, 16:46 第 9 帖
gybcb
 
 
 
注册会员  
  注册日期: Mar 2003
  帖子: 45
  精华: 1
 

to javalee:
那怎么样可以取得当前拷贝的一些消息呢?
cp有没有什么可以设置回调函数的方法,或类似的方法呢?
:)
  gybcb 当前离线   回复时引用此帖
旧 03-07-03, 18:05 第 10 帖
lucida
 
 
 
注册会员  
  注册日期: Oct 2002
  我的住址: .:DRL:.
  帖子: 2,492
  精华: 9
 

引用:
最初由 javalee 发表
我个人看没那个必要吧!像dialog/Xdialog等工具都可以做到的(比如作些安装程序等)!但是为了显示一个进度条而改写cp,是不是舍简求繁了呢?!
这个问题是这样,如果文件不多,而且不考虑目录深度,当然可以用dialog
但是,如果是一个通用解决方案,假设我要把一个带上万文件的复杂目录cp到另外一处,这样的方法肯定是毫无效率的, 或者是,只有一个大文件,希望在复制中实时显示进度,这些都是dialog无法实现的。。

btw,cp的源码在
http://www.gnu.org/software/fileutils/fileutils.html

我只能说,如果楼主真有这样的需求,那就自己重写一个cp,显示每个文件的具体复制进度,这个很简单的。如果只是为了学习shell,大可以放弃这个想法。
  lucida 当前离线   回复时引用此帖
旧 03-07-04, 10:22 第 11 帖
gybcb
 
 
 
注册会员  
  注册日期: Mar 2003
  帖子: 45
  精华: 1
 

我的需求就是要拷贝一个大文件的时候,显示进度!
因为我经常在网上拷贝比较大的单个文件,1G-2G这会比较慢,所以我需要一个进度条来显示拷贝文件的进度。
to penny:
我上这儿来问这个问题是,我觉得cp因该已经提供这个功能了,我只是不知道这个参数而已。
源码收到了,晚上看一下代码。
多谢!
to javalee:
多谢斑竹的热心帮助!Thanks!
  gybcb 当前离线   回复时引用此帖
旧 03-07-04, 10:34 第 12 帖
gybcb
 
 
 
注册会员  
  注册日期: Mar 2003
  帖子: 45
  精华: 1
 

penny
★☆

注册日期: Oct 2002
来  自: .:ET8.NET:.------???
发贴数量: 539

penny兄,我想问一下你现在在哪个城市啊?
  gybcb 当前离线   回复时引用此帖
旧 03-07-04, 14:19 第 13 帖
idkey
 
idkey 的头像
 
 
注册会员  
  注册日期: Sep 2002
  帖子: 366
  精华: 1
 

不需要修改cp代码,可以检测 dest-file 的大小,和 source-file 对比就可以知道进度了。







__________________
我是 xyb 的马甲,呵呵

...."Have you mooed today?"...
  idkey 当前离线   回复时引用此帖
旧 03-07-04, 21:51 第 14 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

这个问题我认为值得讨论!
我有个提议,咱们也立个项,大家都动动脑筋,写一个在拷贝过程中显示进度的脚本,如何?
欢迎参与~~~~~~~~~~~~~
  KornLee 当前离线   回复时引用此帖
旧 03-07-05, 00:12 第 15 帖
idkey
 
idkey 的头像
 
 
注册会员  
  注册日期: Sep 2002
  帖子: 366
  精华: 1
 

代码:
#!/bin/sh # Last modified: 2003年07月05日 星期六 00时09分44秒 [test] SOURCE=$1 TARGET=$2 #CP=./fack_cp CP=cp $CP "$SOURCE" "$TARGET" & CPID=$! isalive(){ out=`ps -p $1 2> /dev/null` return $? } while [ 1 ]; do { SSIZE=`/bin/ls -l $SOURCE | gawk "{print \\\$5}"` if [ -f $TARGET ]; then TSIZE=`/bin/ls -l $TARGET | gawk "{print \\\$5}"` else TSIZE="0" fi PERCENT=`echo "scale=2; $TSIZE/$SSIZE*100" | bc -l` RATE=`echo "scale=0; 63*$PERCENT/100" | bc -l` BLUE="\\033[3;44m" NORMAIL="\\033[0;39m" BAR=$BLUE i=0 while [ $i -le 62 ]; do [ $i = $RATE ] && BAR=$BAR"\\033[7;39m" BAR=$BAR" " let i=$i+1 done BAR=$BAR$NORMAIL echo -en "\r$BAR ${PERCENT}%" if ! isalive "$CPID"; then echo -en "\n"; exit; fi sleep 1 } done
  idkey 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 13:16


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2010, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2009, LinuxSir.Org