GNU/Linux >> Tutoriels Linux >  >> Linux

Convertir lisible par l'homme en octets dans bash

Voici une fonction qui comprend les préfixes binaires et décimaux et qui est facilement extensible pour les grandes unités en cas de besoin :

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
} 

exemple :

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

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

Les suffixes ne sont pas sensibles à la casse.


Utilisez numfmt --from=iec de GNU coreutils.


Linux
  1. Bash Convertir \xc3\x89 en É ?

  2. Convertir les formats de date en bash

  3. Comment convertir .. dans les noms de chemin en nom absolu dans un script bash ?

  4. convertir la sortie bash `ls` en tableau json

  5. Trier les tailles de fichiers lisibles par l'homme

Bash jusqu'à la boucle

Déclaration de cas bash

Instruction Bash if..else

Tableaux bash

Bash Shebang

Comment afficher la taille du fichier au format lisible par l'homme (Ko, Mo, Go) dans le terminal Linux