1260684Skaiw#!/bin/sh
2260684Skaiw# $Id: acp.sh 2086 2011-10-27 05:18:01Z jkoshy $
3260684Skaiw
4260684Skaiw# This script is adapted from Jan Psota's Tar Comparison Program(TCP).
5260684Skaiw
6260684Skaiwn=3			# number of repetitions
7260684SkaiwAR="bsdar gnuar"	# ar archivers to compare
8260684Skaiw
9260684Skaiwtest $# -ge 2 || {
10260684Skaiw    echo "usage: $0 source_dir where_to_place_archive [where_to_extract_it]"
11260684Skaiw    exit 0
12260684Skaiw}
13260684Skaiw
14260684SkaiwTHISDIR=`/bin/pwd`
15260684Skaiwsrc=$1
16260684Skaiwdst=$2/acp.a
17260684Skaiwext=${3:-$2}/acptmp
18260684Skaiwtest -e $dst -o -e /tmp/acp \
19260684Skaiw    && { echo "$dst or /tmp/acp exists, exiting"; exit 1; }
20260684Skaiwmkdir -p $ext || exit 1
21260684Skaiw
22260684Skaiwshow_result ()
23260684Skaiw{
24260684Skaiw    awk -vL="`du -k $dst`" '{printf "%s\t%s\t%s\%10.1d KB/s\n",
25260684Skaiw$1, $3, $5, ($1>0?L/$1:0)}' /tmp/acp | sort | head -n 1
26260684Skaiw}
27260684Skaiw
28260684Skaiwtest -d $src || { echo "'$src' is not a directory"; exit 1; }
29260684Skaiw
30260684Skaiw# ar versions
31260684Skaiwfor ar in $AR; do echo -n "$ar:	"; $ar -V | head -n 1;
32260684Skaiwdone
33260684Skaiw
34260684Skaiwecho
35260684Skaiwecho "best time of $n repetitions"
36260684Skaiwecho -n "		src=$src, "
37260684Skaiwecho -n "`du -sh $src | awk '{print $1}'`"
38260684Skaiwecho -n " in "
39260684Skaiwecho "`find $src | wc -l` files"
40260684Skaiwecho "		archive=$dst, extract to $ext"
41260684Skaiw
42260684Skaiwecho "program	operation	real	user	system	   speed"
43260684Skaiwfor op in "cru $dst $src/*" "t $dst" "x `basename $dst`"; do
44260684Skaiw    for ar in $AR; do
45260684Skaiw	echo -n "$ar	"
46260684Skaiw	echo $op | grep -q ^cr && echo -n "create		"
47260684Skaiw	echo $op | grep -q ^t && echo -n "list		"
48260684Skaiw	echo $op | grep -q ^x && echo -n "extract		"
49260684Skaiw	num=0
50260684Skaiw	while [ $num -lt $n ]; do
51260684Skaiw	    echo $op | grep -q ^cr && rm -f $dst
52260684Skaiw	    echo $op | grep -q ^x && { rm -rf $ext; mkdir -p $ext
53260684Skaiw		cp $dst $ext; cd $ext; }
54260684Skaiw	    sync
55260684Skaiw	    time $ar $op > /dev/null 2>> /tmp/acp
56260684Skaiw	    echo $op | grep -q ^x && cd $THISDIR
57260684Skaiw	    num=`expr $num + 1`
58260684Skaiw	done
59260684Skaiw	show_result
60260684Skaiw	rm -rf /tmp/acp
61260684Skaiw    done
62260684Skaiw    echo
63260684Skaiwdone
64260684Skaiwrm -rf $ext $dst
65260684Skaiwrm -f /tmp/acp
66