GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Konvertieren Sie für Menschen lesbare Bytes in Bash

Hier ist eine Funktion, die binäre und dezimale Präfixe versteht und bei Bedarf leicht für große Einheiten erweiterbar ist:

dehumanise() {
  for v in "${@:-$(</dev/stdin)}"
  do  
    echo $v | awk \
      'BEGIN{IGNORECASE = 1}
       function printpower(n,b,p) {printf "%u\n", n*b^p; next}
       /[0-9]$/{print $1;next};
       /K(iB)?$/{printpower($1,  2, 10)};
       /M(iB)?$/{printpower($1,  2, 20)};
       /G(iB)?$/{printpower($1,  2, 30)};
       /T(iB)?$/{printpower($1,  2, 40)};
       /KB$/{    printpower($1, 10,  3)};
       /MB$/{    printpower($1, 10,  6)};
       /GB$/{    printpower($1, 10,  9)};
       /TB$/{    printpower($1, 10, 12)}'
  done
} 

Beispiel:

$ dehumanise 2K 2k 2KiB 2KB 
2048
2048
2048
2000

$ dehumanise 2G 2g 2GiB 2GB 
2147483648
2147483648
2147483648
2000000000

Bei den Suffixen wird die Groß- und Kleinschreibung nicht beachtet.


Verwenden Sie numfmt --from=iec von GNU Coreutils.


Linux
  1. Wie konvertiert man .. in Pfadnamen in absolute Namen in einem Bash-Skript?

  2. Konvertieren Sie die Ausgabe von bash `ls` in ein json-Array

  3. Dateigröße im menschenlesbaren Format

  4. Konvertieren Sie eine Textzeichenfolge in Bash in ein Array

  5. Sortieren von menschenlesbaren Dateigrößen

Bash bis Loop

Bash-Case-Statement

Bash if..else-Anweisung

Bash-Arrays

Bash Shebang

So zeigen Sie die Dateigröße im menschenlesbaren Format (KB, MB, GB) im Linux-Terminal an