Sida 1 av 1

Om man vill ha en progress-bar till dd...

Postat: 05 nov 2010, 19:35
av Osprey
Ibland kan det vara trevligt med en progress-bar till dd, så man ser hur arbetet fortskrider. Det här är egentligen ett ganska enkelt script som skulle kunna vidareutvecklas, men som det är nu så täcker det mina behov... :)

Kod: Markera allt

#! /bin/bash
#
function isnum {
	echo ">>$1"
	if [[ $1 =~ ^[0-9]+$ ]]; then
		echo ">1=$1"
		return 1
	fi
	echo ">0"
	return 0
}
function drawbar {
	NEWFILE=$1
	OLDSIZE=$2
	touch $NEWFILE
	while [[ true ]]; do
		let NEWSIZE=$(ls -l $NEWFILE | awk '{ print $5 }')
		let Q=$((100*NEWSIZE/OLDSIZE))
		#
		let K=$((100-$Q))
		#
		echo -n "["
		I=$Q
		while [[ $I -gt 0 ]]; do
			echo -n "="
			let I=$I-1
		done
		I=$K
		while [[ $I -gt 0 ]]; do
			echo -n " "
			let I=$I-1
		done
		echo -n "] $Q% "
		#
		if [[ $Q -ge 100 ]]; then
			break
		fi
		#
		sleep 1
		printf "\r"
	done
}
#
if [[ -z $1 || -z $2 ]]; then
	echo
	echo "-At least two parameters required, if= and of="
	echo
	exit
fi
N=$#
PARAM=$@
#
let i=1
for P in $PARAM; do
	IF=$(echo $P | awk '{ print index($1,"if=") }')
	OF=$(echo $P | awk '{ print index($1,"of=") }')
	if [[ $IF != 0 ]]; then
		INFILE=$(echo $P | awk  '{ split($0, p, "="); print p[2]; }')
	elif [[ $OF != 0 ]]; then
		OUTFILE=$(echo $P | awk  '{ split($0, p, "="); print p[2]; }')
	fi
	let i=i+1
done
#
echo
file $INFILE | grep "block special" >> /dev/null
if [[ $? == 0 ]]; then
	PART=$(echo $INFILE | awk '{ split($0, p, "/"); print p[3]; }')
	DEV=$(echo $PART | awk '{ print substr($0,1,3) }')
	#SZ=$(parted $INFILE unit B print | awk '{y=x; x=$4};END{print y}' | sed 's/B//')
	SIZE=$(expr 512 '*' $(cat /sys/block/$DEV/$PART/size))
else
	SIZE=$(ls -l $INFILE | awk '{ print $5 }')
fi
LOG=$(mktemp)
dd $PARAM > $LOG 2>&1 &
PID=$(jobs -l | grep "dd \$PARAM" | awk '{ print $2 }')
drawbar $OUTFILE $SIZE
echo
echo "Checking PID=$PID"
wait $PID
echo "OK"
cat $LOG
rm $LOG
echo

Re: Om man vill ha en progress-bar till dd...

Postat: 03 dec 2010, 02:08
av Mekaniserad Apelsin
Schysst!

Själv använder jag pipeviewer (eller dess kortare namn: pv).

Re: Om man vill ha en progress-bar till dd...

Postat: 03 dec 2010, 07:22
av Osprey
Pipeviewer verkar trevlig också, den får jag kika närmare på... ;)

Re: Om man vill ha en progress-bar till dd...

Postat: 07 dec 2010, 00:06
av bittin
fan vad najs script :)