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/