summaryrefslogtreecommitdiff
path: root/scripts/library
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/library')
-rw-r--r--scripts/library/README4
-rw-r--r--scripts/library/size_to_human.sh20
2 files changed, 24 insertions, 0 deletions
diff --git a/scripts/library/README b/scripts/library/README
index 44748ee2..0fa0f847 100644
--- a/scripts/library/README
+++ b/scripts/library/README
@@ -35,3 +35,7 @@ successful, the converted byte value is written to stdout and the function
returns 0. If an error occurs, nothing in written and the function returns 1.
Results may be inaccurate when using a broken implementation of awk, such
as mawk or busybox awk.
+
+size_to_human.sh:
+The reverse of human_to_size, this function takes an integer byte size and
+prints its in human readable format, with SI prefixes (e.g. MiB, TiB).
diff --git a/scripts/library/size_to_human.sh b/scripts/library/size_to_human.sh
new file mode 100644
index 00000000..9c0f0de2
--- /dev/null
+++ b/scripts/library/size_to_human.sh
@@ -0,0 +1,20 @@
+size_to_human() {
+ awk -v size="$1" '
+ BEGIN {
+ suffix[1] = "B"
+ suffix[2] = "KiB"
+ suffix[3] = "MiB"
+ suffix[4] = "GiB"
+ suffix[5] = "TiB"
+ count = 1
+
+ while (size > 1024) {
+ size /= 1024
+ count++
+ }
+
+ sizestr = sprintf("%.2f", size)
+ sub(/\.?0+$/, "", sizestr)
+ printf("%s %s", sizestr, suffix[count])
+ }'
+}