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

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

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

Inlägg 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
Senast redigerad av 1 Osprey, redigerad totalt 6 gånger.
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
Mekaniserad Apelsin
Hedersmedlem
Inlägg: 3777
Blev medlem: 27 maj 2006, 12:24
OS: Ubuntu
Ort: Stockholm
Kontakt:

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

Inlägg av Mekaniserad Apelsin »

Schysst!

Själv använder jag pipeviewer (eller dess kortare namn: pv).
More Mekaniserad at http://blippe.se.
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

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

Inlägg av Osprey »

Pipeviewer verkar trevlig också, den får jag kika närmare på... ;)
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
bittin
Inlägg: 1471
Blev medlem: 05 jun 2007, 14:03
OS: Debian
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Täby
Kontakt:

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

Inlägg av bittin »

fan vad najs script :)
Skriv svar

Återgå till "Terminalforum"