Einfachste Methode zum Konvertieren von Dateigrößen mit Suffix in Bytes

Der Titel sagt eigentlich schon alles, aber ich verwende derzeit eine einfache Funktion mit einer case-Anweisung, um von Menschen lesbare Zeichenfolgen in eine Größe in Bytes umzuwandeln. Es funktioniert gut genug, ist aber für die Portierung in anderen Code etwas unhandlich. Daher bin ich gespannt, ob es allgemein verfügbare Befehle gibt, die ein Shell-Skript stattdessen verwenden könnte.

Grundsätzlich möchte ich Strings wie "100g" oder "100gb" nehmen und in Bytes konvertieren.

Ich mache momentan folgendes:

to_bytes() {
    value=$(echo "$1" | sed 's/[^0123456789].*$//g')
    units=$(echo "$1" | sed 's/^[0123456789]*//g' | tr '[:upper:]' '[:lower:]')

    case "$units" in
        t|tb)   let 'value *= 1024 * 1024 * 1024 * 1024'    ;;
        g|gb)   let 'value *= 1024 * 1024 * 1024'   ;;
        m|mb)   let 'value *= 1024 * 1024'  ;;
        k|kb)   let 'value *= 1024' ;;
        b|'')   let 'value += 0'    ;;
        *)
                value=
                echo "Unsupported units '$units'" >&2
        ;;
    esac

    echo "$value"
}

Es scheint ein bisschen übertrieben für etwas, von dem ich gedacht hätte, dass es für Skripte, die mit Dateien arbeiten, ziemlich üblich ist. häufig genug, dass es etwas gibt, um dies schneller zu tun.

Wenn es keine allgemein verfügbaren Lösungen gibt (d. H. Die Mehrheit der Unix- und Linux-Versionen), würde ich mich über Tipps zur Optimierung der oben genannten Funktion freuen, da ich sie verkleinern und die Wiederverwendung vereinfachen möchte.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage