Самый простой метод для преобразования размера файла с суффиксом в байтах
В Title все сказано, но в настоящее время я использую простую функцию с оператором case для преобразования понятных человеку строк размера файла в размер в байтах. Это работает достаточно хорошо, но это немного громоздко для переноса в другой код, поэтому мне любопытно узнать, есть ли какие-либо широко доступные команды, которые вместо этого может использовать скрипт оболочки?
В основном я хочу взять такие строки, как «100g» или «100gb» и преобразовать их в байты.
В настоящее время я делаю следующее:
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"
}
Кажется, это немного излишне для чего-то, что, как я думал, было довольно распространено для скриптов, работающих с файлами; достаточно часто, что-то может существовать, чтобы сделать это быстрее.
Если бы не было широко доступных решений (т. Е. Большинства разновидностей Unix и Linux), я все равно буду рад любым советам по оптимизации вышеупомянутой функции, поскольку я хотел бы сделать ее меньше и проще для повторного использования.