[PATCH 08/35] fsadm: Update "list" command for better alignment

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The output of list command is now dynamically aligned so it should be
well readably even in the case there are long names. It looks much
better this way.

Signed-off-by: Lukas Czerner <lczerner@redhat.com>
---
 scripts/fsadm.sh |  206 +++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 141 insertions(+), 65 deletions(-)

diff --git a/scripts/fsadm.sh b/scripts/fsadm.sh
index 5dc945b..d42b759 100755
--- a/scripts/fsadm.sh
+++ b/scripts/fsadm.sh
@@ -807,19 +807,12 @@ detect_fs_size() {
 #############################
 list_filesystems() {
 	IFS=$NL
-	format="%-20s%-8s%-13s%-13s%-13s%s\n"
-	header=$(printf $format "Volume" "Type" "Free" "Used" "Total" "Mount point")
-	separator=""
-	for i in $(seq ${#header}); do
-		separator+="-"
-	done
-	echo $separator
-	echo $header
-	echo $separator
-	c=0
+	local c=0
 	for line in $(LANG=C $LVM lvs -o lv_path,lv_size --noheadings --separator ' ' --nosuffix --units k 2> /dev/null); do
+		c=$((c+1))
 		line=$(echo $line | sed -e 's/^ *\//\//')
 		volume=$(echo $line | cut -d' ' -f1)
+		volumes[$c]=$volume
 		detect_fs $volume
 		detect_mounted
 		detect_fs_size
@@ -827,20 +820,60 @@ list_filesystems() {
 			total=$(echo $line | cut -d' ' -f2)
 			TOTAL=$(humanize_size ${total%%.})
 		fi
-		printf "$format" "$volume" "$FSTYPE" "$FREE" "$USED" "$TOTAL" "$MOUNTED"
-		volume=
+		total[$c]=$TOTAL
+		fstype[$c]=$FSTYPE
+		free[$c]=$FREE
+		used[$c]=$USED
+		mounted[$c]=$MOUNTED
 		FSTYPE=
 		FREE=
 		USED=
 		TOTAL=
 		MOUNTED=
-		c=$((c+1))
 	done
+	IFS=$IFS_OLD
+
 	if [ $c -eq 0 ]; then
 		echo " No file systems suitable for managing by $TOOL found."
+		return
 	fi
+
+	len_volume=6
+	len_fstype=2
+	len_free=4
+	len_used=4
+	len_total=5
+	len_mounted=11
+	for i in $(seq $c); do
+		local _volume=${volumes[$i]}
+		local _fstype=${fstype[$i]}
+		local _total=${total[$i]}
+		local _free=${free[$i]}
+		local _used=${used[$i]}
+		local _mounted=${mounted[$i]}
+		[ ${#_volume} -gt "0$len_volume" ] && len_volume=${#_volume}
+		[ ${#_fstype} -gt "0$len_fstype" ] && len_fstype=${#_fstype}
+		[ ${#_total} -gt "0$len_total" ] && len_total=${#_total}
+		[ ${#_free} -gt "0$len_free" ] && len_free=${#_free}
+		[ ${#_used} -gt "0$len_used" ] && len_used=${#_used}
+		[ ${#_mounted} -gt "0$len_mounted" ] && len_mounted=${#_mounted}
+	done
+
+	format="%-$(($len_volume+2))s%-$(($len_fstype+2))s%-$(($len_free+2))s%-$(($len_used+2))s%-$(($len_total+2))s%-$(($len_mounted+2))s\n"
+	header=$(printf "$format" "Volume" "FS" "Free" "Used" "Total" "Mount point")
+	separator=""
+	for i in $(seq ${#header}); do
+		separator+="-"
+	done
+	echo $separator
+	printf "$format" "Volume" "FS" "Free" "Used" "Total" "Mount point"
+	echo $separator
+
+	for i in $(seq $c); do
+		printf "$format" "${volumes[$i]}" "${fstype[$i]}" "${free[$i]}" "${used[$i]}" "${total[$i]}" "${mounted[$i]}"
+	done
+
 	echo $separator
-	IFS=$IFS_OLD
 }
 
 ###########################
@@ -850,23 +883,15 @@ list_devices() {
 	IFS=$NL
 	tmp=$(mktemp)
 
-	format="%-13s%-13s%-13s%-13s%-13s%s\n"
-	header=$(printf $format "Device" "Free" "Used" "Total" "Group" "Mount point")
-	separator=""
-	for i in $(seq ${#header}); do
-		separator+="-"
-	done
-	echo $separator
-	echo $header
-	echo $separator
 	c=0
 	dmnumber=$(cat $PROCDEVICES | grep device-mapper | sed -e 's/^  *//')
 	dmnumber=${dmnumber%% *}
 	LANG=C $LVM pvs -o pv_name,vg_name,pv_size,pv_free,pv_used --separator ' ' --noheadings --nosuffix --units k > $tmp
 	for line in $(cat $PROCPARTITIONS | tail -n +3 | sed -e 's/^  *//' | grep -v -e "^$dmnumber"); do
+		c=$((c+1))
 		line=$(echo $line | sed -e 's/  */ /g')
-		total=$(echo $line | cut -d' ' -f3)
-		total=$(humanize_size ${total%%.*})
+		_total=$(echo $line | cut -d' ' -f3)
+		total[$c]=$(humanize_size ${_total%%.*})
 		VOLUME=$(echo $line | cut -d' ' -f4)
 		RVOLUME="/dev/$(echo $line | cut -d' ' -f4)"
 		line=$($GREP -e " $RVOLUME " $tmp)
@@ -878,31 +903,65 @@ list_devices() {
 
 		if [ ! -z $line ]; then
 			line=$(echo $line | sed -e 's/^ *\//\//')
-			RVOLUME=$(echo $line | cut -d' ' -f1)
-			group=$(echo $line | cut -d' ' -f2)
-			total=$(echo $line | cut -d' ' -f3)
-			total=$(humanize_size ${total%%.*})
-			free=$(echo $line | cut -d' ' -f4)
-			free=$(humanize_size ${free%%.*})
-			used=$(echo $line | cut -d' ' -f5)
-			used=$(humanize_size ${used%%.*})
+			group[$c]=$(echo $line | cut -d' ' -f2)
+			_total=$(echo $line | cut -d' ' -f3)
+			total[$c]=$(humanize_size ${_total%%.*})
+			_free=$(echo $line | cut -d' ' -f4)
+			free[$c]=$(humanize_size ${_free%%.*})
+			_used=$(echo $line | cut -d' ' -f5)
+			used[$c]=$(humanize_size ${_used%%.*})
 		fi
-
-		printf "$format" "$RVOLUME" "$free" "$used" "$total" "$group" "$MOUNTED"
-		RVOLUME=
+		volumes[$c]=$RVOLUME
+		mounted[$c]=$MOUNTED
 		free=
 		used=
 		total=
-		group=
 		MOUNTED=
-		c=$((c+1))
 	done
+	IFS=$IFS_OLD
+	rm -f $tmp
+
 	if [ $c -eq 0 ]; then
 		echo " No devices found."
+		return
 	fi
+
+	len_volume=6
+	len_free=4
+	len_used=4
+	len_total=5
+	len_group=5
+	len_mounted=11
+	for i in $(seq $c); do
+		local _volume=${volumes[$i]}
+		local _free=${free[$i]}
+		local _used=${used[$i]}
+		local _total=${total[$i]}
+		local _group=${group[$i]}
+		local _mounted=${mounted[$i]}
+		[ ${#_volume} -gt "0$len_volume" ] && len_volume=${#_volume}
+		[ ${#_free} -gt "0$len_free" ] && len_free=${#_free}
+		[ ${#_used} -gt "0$len_used" ] && len_used=${#_used}
+		[ ${#_total} -gt "0$len_total" ] && len_total=${#_total}
+		[ ${#_group} -gt "0$len_group" ] && len_group=${#_group}
+		[ ${#_mounted} -gt "0$len_mounted" ] && len_mounted=${#_mounted}
+	done
+
+	format="%-$(($len_volume+2))s%-$(($len_free+2))s%-$(($len_used+2))s%-$(($len_total+2))s%-$(($len_group+2))s%-$(($len_mounted+2))s\n"
+	header=$(printf $format "Device" "Free" "Used" "Total" "Group" "Mount point")
+	separator=""
+	for i in $(seq ${#header}); do
+		separator+="-"
+	done
+	echo $separator
+	printf $format "Device" "Free" "Used" "Total" "Group" "Mount point"
+	echo $separator
+
+	for i in $(seq $c); do
+		printf "$format" "${volumes[$i]}" "${free[$i]}" "${used[$i]}" "${total[$i]}" "${group[$i]}" "${mounted[$i]}"
+	done
+
 	echo $separator
-	IFS=$IFS_OLD
-	rm -f $tmp
 }
 
 ################################
@@ -910,41 +969,58 @@ list_devices() {
 ################################
 list_pool() {
 	IFS=$NL
+	c=0
+	for line in $(LANG=C $LVM vgs -o vg_name,pv_count,vg_size,vg_free --separator ' ' --noheadings --nosuffix --units k 2> /dev/null); do
+		c=$((c+1))
+		line=$(echo $line | sed -e 's/^ *//')
+		group[$c]=$(echo $line | cut -d' ' -f1)
+		devices[$c]=$(echo $line | cut -d' ' -f2)
+		_total=$(echo $line | cut -d' ' -f3)
+		_free=$(echo $line | cut -d' ' -f4)
+		_used=$((${_total%%.*}-${_free%%.*}))
+		used[$c]=$(humanize_size ${_used%%.*})
+		total[$c]=$(humanize_size ${_total%%.*})
+		free[$c]=$(humanize_size ${_free%%.*})
+	done
+	IFS=$IFS_OLD
 
-	format="%-10s%-9s%-13s%-13s%s\n"
+	if [ $c -eq 0 ]; then
+		echo " No pools found on the system."
+		return
+	fi
+
+	len_group=5
+	len_devices=6
+	len_free=4
+	len_used=4
+	len_total=5
+	for i in $(seq $c); do
+		local _group=${group[$i]}
+		local _devices=${devices[$i]}
+		local _free=${free[$i]}
+		local _used=${used[$i]}
+		local _total=${total[$i]}
+		[ ${#_group} -gt "0$len_group" ] && len_group=${#_group}
+		[ ${#_devices} -gt "0$len_devices" ] && len_devices=${#_devices}
+		[ ${#_free} -gt "0$len_free" ] && len_free=${#_free}
+		[ ${#_used} -gt "0$len_used" ] && len_used=${#_used}
+		[ ${#_total} -gt "0$len_total" ] && len_total=${#_total}
+	done
+
+	format="%-$(($len_group+2))s%-$(($len_devices+2))s%-$(($len_free+2))s%-$(($len_used+2))s%-$(($len_total+2))s\n"
 	header=$(printf $format "Group" "Devices" "Free" "Used" "Total")
 	separator=""
 	for i in $(seq ${#header}); do
 		separator+="-"
 	done
 	echo $separator
-	echo $header
+	printf $format "Group" "Devices" "Free" "Used" "Total"
 	echo $separator
-	c=0
-	for line in $(LANG=C $LVM vgs -o vg_name,pv_count,vg_size,vg_free --separator ' ' --noheadings --nosuffix --units k 2> /dev/null); do
-		line=$(echo $line | sed -e 's/^ *//')
-		group=$(echo $line | cut -d' ' -f1)
-		devices=$(echo $line | cut -d' ' -f2)
-		total=$(echo $line | cut -d' ' -f3)
-		free=$(echo $line | cut -d' ' -f4)
-		used=$((${total%%.*}-${free%%.*}))
-		used=$(humanize_size ${used%%.*})
-		total=$(humanize_size ${total%%.*})
-		free=$(humanize_size ${free%%.*})
-
-		printf "$format" "$group" "$devices" "$free" "$used" "$total"
-		group=
-		devices=
-		total=
-		free=
-		used=
-		c=$((c+1))
+
+	for i in $(seq $c); do
+		printf "$format" "${group[$i]}" "${devices[$i]}" "${free[$i]}" "${used[$i]}" "${total[$i]}"
 	done
-	if [ $c -eq 0 ]; then
-		echo " No pools found on the system."
-	fi
 	echo $separator
-	IFS=$IFS_OLD
 }
 
 #############################
-- 
1.7.4.4

_______________________________________________
linux-lvm mailing list
linux-lvm@redhat.com
https://www.redhat.com/mailman/listinfo/linux-lvm
read the LVM HOW-TO at http://tldp.org/HOWTO/LVM-HOWTO/


[Index of Archives]     [Gluster Users]     [Kernel Development]     [Linux Clusters]     [Device Mapper]     [Security]     [Bugtraq]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]

  Powered by Linux