diff --git a/files/fastdu b/files/fastdu index d99b214..0e32afa 100755 --- a/files/fastdu +++ b/files/fastdu @@ -33,16 +33,16 @@ function siprefix() { # Return a SI prefixed string from integer [ "$1" = "0" ] && { - echo "0 " + echo "0 #" return 0 } awk 'BEGIN{ x = '$1' - split("_ k M G T P E Z",type) + split("# k# M# G# T# P# E# Z#",type) for(i=7;y < 1;i--) y = x / (10^(3*i)) str=int(y*10)/10 " " type[i+2] - if (i==-1) { str = x " " } + if (i==-1) { str = x " #" } print str }' || return $? } @@ -58,27 +58,20 @@ function animate() { } function processfolder() { - if [[ "$COUNT" -eq 1 ]]; then - countfiles "$@" - else - displaysize "$@" - fi -} -function countfiles() { - SIZE=$( find "$@" -type f -printf %s"\n" 2>/dev/null | awk '{ sum += 1 } END { print int(sum)+0 }' ) - [[ "$HUMAN" -eq 1 ]] && { - SIZE=$( siprefix "$SIZE" ) - } - echo "${SIZE}" -} + SIZECOUNT=( $( find "$@" -type f -printf %s"\n" 2>/dev/null | awk '{ sum += $1; count += 1 } END { print int(sum)+0 , int(count)+0 }' ) ) + SIZE=${SIZECOUNT[0]} -function displaysize() { - SIZE=$( find "$@" -type f -printf %s"\n" 2>/dev/null | awk '{ sum += $1 } END { print int(sum)+0 }' ) [[ "$HUMAN" -eq 1 ]] && { SIZE=$( filesize "$SIZE" ) } - echo "$SIZE" + [[ "$COUNT" -eq 1 ]] && { + COUNTS=${SIZECOUNT[1]} + [[ "$HUMAN" -eq 1 ]] && { + COUNTS=$( siprefix "$COUNTS" ) + } + } + echo -e "$SIZE\t$COUNTS" } # Get options @@ -109,21 +102,24 @@ fi if [[ "$ANIMATE" -eq 1 ]]; then animate & fi +[[ "$HUMAN" -eq 1 ]] && NUMFORMAT="%5s %2s " +[[ "$HUMAN" -ne 1 ]] && NUMFORMAT="%d\t" +[[ "$COUNT" -eq 1 ]] && NUMBERS="$NUMFORMAT$NUMFORMAT" +[[ "$COUNT" -ne 1 ]] && NUMBERS="$NUMFORMAT" +[[ "SUMMARY" -eq 1 ]] && FORMAT="$NUMBERS\n" +[[ "SUMMARY" -ne 1 ]] && FORMAT="$NUMBERS %s\n" + if [[ "$SUMMARY" -eq 1 ]]; then # Display one line - processfolder "${what[@]}" + processfolder "${what[@]}" | xargs printf "$FORMAT" else - if [[ "$HUMAN" -eq 1 ]]; then - FORMAT="%8s %s\n" - else - FORMAT="%d\t%s\n" - fi # One size for each argument for dir in "${what[@]}"; do - printf "$FORMAT" "$( processfolder "$dir" )" "$dir" + printf "%s %s\n" "$( processfolder "$dir" )" "$dir" | xargs printf "$FORMAT" done fi + if [[ "$ANIMATE" -eq 1 ]]; then kill %1 fi