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