タイトルは本当にそれをすべて言いますが、私は現在、ケースステートメントを含む単純な関数を使用して、人間が読めるファイルサイズの文字列をバイト単位のサイズに変換しています。十分に機能しますが、他のコードに移植するには少し扱いにくいので、代わりにシェルスクリプトで使用できる広く利用可能なコマンドがあるかどうか知りたいですか?
基本的には「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 のフレーバーの大部分)、上記の関数を最適化するためのヒントをいただければ幸いです。関数を小さくして再利用しやすくしたいからです。