人間に優しいファイルサイズを変数に保存するには?

人間に優しいファイルサイズを変数に保存するには?

基本的に私が望むのは、サイズがしきい値(私の場合は2.2 GB)を超えるディレクトリ内のすべてのファイルをサイズで出力するスクリプトを作成することです。次のようにstatコマンドを使用してみました。

a=$(stat -c '%s' example.txt)

ただし、これはファイルサイズをバイト単位で保存します。私が望むのは、人間が読める形式(MB、GB)でサイズを保存して表示することです。出力を保存しls -lahた後、名前とサイズだけを保存するように結果をトリミングすることも検討しましたが、これは面倒な作業のようです。結果をバイト単位で保存し、それに対して算術を実行する以外の方法はありますか?

ベストアンサー1

すでにGNUツールを使用しているので、numfmtGNU coreutilsをご覧ください。

$ stat -c %s file
310776
$ stat -c '%s' file | numfmt --to=si
311K
$ stat -c '%s' file | numfmt --to=iec
304K
$ stat -c '%s' file | numfmt --to=iec-i
304Ki
$ stat -c '%s' file | numfmt --to=si --suffix=B
311KB

そしてksh93

$ size=$(stat -c %s file)
$ printf "%#d %#i\n" "$size" "$size"
311k 304Ki

またはls組み込み関数を使用してビルドした場合(全開パック):

$ type ls
ls is a shell builtin version of /opt/ast/bin/ls
$ ls -Z '%#(size)d %#(size)i' file
311k 304Ki

おすすめ記事