大文件或目录复制时的信息统计脚本

Linux就该这么学

昨天在机房等待复制数据(332G)时,实在等待的无聊,就写了这么个东西;主要用于当开始一个复制操作时,如果量比较大,我们又必须等待其完成,每次通过du查看的数据,自己要算一下才知道大概有多久;这个很麻烦,于是想,这应该是个很简单的脚本;

先说操作前提,首先得有正在复制的东东,文件或目录皆可,然后要给脚本一个间隔时间,脚本通过间隔时间来计算平均每秒复制速度,然后还要告诉脚本源文件和目标文件,当然目录也可以。

如下:

./script.sh 10 /nfs/openSUSE-11.2-DVD-x86_64.iso /opt/os/openSUSE-11.2-DVD-x86_64.iso 
Speed: 13.20MB/s; Done: 0.12GB; 121.00MB     # 每秒平均速度,完成的GB多少,MB多少 
Time: 5.45 sec; Have: 4.22GB; 4316.41MB      # 预计还需要多少分钟,还有多少没复制,其大小是多少GB,MB 
1
2
3
./script.sh 10 /nfs/openSUSE-11.2-DVD-x86_64.iso /opt/os/openSUSE-11.2-DVD-x86_64.iso 
Speed: 13.20MB/s; Done: 0.12GB; 121.00MB     # 每秒平均速度,完成的GB多少,MB多少 
Time: 5.45 sec; Have: 4.22GB; 4316.41MB      # 预计还需要多少分钟,还有多少没复制,其大小是多少GB,MB

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash 
DIR1=${2:-/var/log/
DIR2=${3:-/var/log/
INV=${1:-30} 
HELP(){ 
        echo " Usage: $0 interval /path/source/dir/ /path/destination/dir/"
        echo " Exam: $0 30 /opt/data/bak/ /mnt/disk1/"
        exit 
[ -z $1 ] && HELP 
CT=`du -s $DIR1|awk '{print $1}'
BFR=`du -s $DIR2|awk '{print $1}'
sleep $INV 
AFT=`du -s $DIR2|awk '{print $1}'
DMB=`echo $AFT|awk '{printf("%.2lf",$1/1024)}'
DGB=`echo $AFT|awk '{printf("%.2lf",$1/1024/1024)}'
MB=`echo $AFT $BFR $INV|awk '{printf("%.2lf",($1-$2)/$3/1024)}'
echo "Speed: "$MB"MB/s; Done: "$DGB"GB; "$DMB"MB "
ETIME=`echo $CT $AFT $MB|awk '{printf("%.2lf",($1/1024-$2/1024)/$3/60)}'
EGB=`echo $CT $AFT|awk '{printf("%.2lf",($1-$2)/1024/1024)}'
EMB=`echo $CT $AFT|awk '{printf("%.2lf",($1-$2)/1024)}'
echo "Time: $ETIME sec; Have: "$EGB"GB; "$EMB"MB"
#!/bin/bash 
DIR1=${2:-/var/log/} 
DIR2=${3:-/var/log/} 
INV=${1:-30} 
HELP(){ 
        echo " Usage: $0 interval /path/source/dir/ /path/destination/dir/"
        echo " Exam: $0 30 /opt/data/bak/ /mnt/disk1/"
        exit 1 
} 
[ -z $1 ] && HELP 
CT=`du -s $DIR1|awk '{print $1}'` 
BFR=`du -s $DIR2|awk '{print $1}'` 
sleep $INV 
AFT=`du -s $DIR2|awk '{print $1}'` 
DMB=`echo $AFT|awk '{printf("%.2lf",$1/1024)}'` 
DGB=`echo $AFT|awk '{printf("%.2lf",$1/1024/1024)}'` 
MB=`echo $AFT $BFR $INV|awk '{printf("%.2lf",($1-$2)/$3/1024)}'` 
echo "Speed: "$MB"MB/s; Done: "$DGB"GB; "$DMB"MB "
ETIME=`echo $CT $AFT $MB|awk '{printf("%.2lf",($1/1024-$2/1024)/$3/60)}'` 
EGB=`echo $CT $AFT|awk '{printf("%.2lf",($1-$2)/1024/1024)}'` 
EMB=`echo $CT $AFT|awk '{printf("%.2lf",($1-$2)/1024)}'` 
echo "Time: $ETIME sec; Have: "$EGB"GB; "$EMB"MB" 

本文由 CentOS中文站 - 专注Linux技术 作者:centos 发表,其版权均为 CentOS中文站 - 专注Linux技术 所有,文章内容系作者个人观点,不代表 CentOS中文站 - 专注Linux技术 对观点赞同或支持。如需转载,请注明文章来源。

相关文章

发表评论

邮箱地址不会被公开。 必填项已用*标注