2012年4月9日星期一

让cp命令显示进度条

 
 

satan 通过 Google 阅读器发送给您的内容:

 
 

于 12-4-8 通过 averiany涂鸦馆 作者:averainy

平时用cp指令复制文件的时候,我最多添加一个-v参数来显示下是否复制成功,看到有人问这个,我就google了下,看到又两个还比较不错,一个是freebsdchina论坛里的,这个是重新用c来写一个cp的实现,这样做效率会高很多,但是就是有点儿很蛋疼,你说你有必要为了一个进度条重新写一个实现么,对我来说这个就有点儿大材小用了,下面这个脚本来自于chinanux,纯脚本实现,我想你会比较喜欢这种方式吧,

#!/bin/bash trap 'exit_fun' 2   usage(){         echo "Usage: `basename $0` \"src file\" \"dst file\""         exit 1 }   exit_fun(){         echo -e "\033[?25h"         kill -9 $(ps -ef|awk '/ [c]p /{print $2}') &>/dev/null         exit 1 }   [ "$#" -ne "2" ] && usage [ -d "$2" ] && k=${2%%/}/`basename $1` || k=$2   fromsize=`ls -s $1|cut -d" " -f1` cp $1 $k & start=`date +%s` sleep 0.2 echo -ne "\033[?25l" while :;do         tosize=`ls -s $k|cut -d" " -f1`         x=`echo "$tosize $fromsize"|awk '{print int($1*100/$2)}'`         [ $x -eq 99 ] && x=100         echo -n "["         for((i=0;i<x;i=$i+2));do echo -n "=";done         echo -n ">"         for((j=i;j<=99;j=$j+2));do echo -n " ";done         now=$[`date +%s` - $start]         [ $now -eq 0 ] && now=1         avg=$[$tosize/$now/1024]         printf "]  %4s%%  %4sM/s" $i $avg         [ $x -ge 100 ] && break         sleep 0.1         echo -ne "\r" done echo -e "\033[?25h"

 
 

可从此处完成的操作:

 
 

没有评论:

发表评论