ファイルサイズを表示する簡単なヘルパー関数を書いています。
これまでのコードは次のとおりです。
find . -type f -size +10M -printf "%f -> %s B\n"
私が得た結果は次のとおりです。
clay-banks--Ni2fpLUgRI-unsplash.jpg -> 181794593 B
jake-nackos-_kdX2vPc33U-unsplash.jpg -> 448148323 B
73-738467_nature-wallpapers-high-quality-images-hd-desktop-images.jpg -> 131115725 B
しかし、ファイルサイズをMB単位で表示したいと思います。
bのように動作するにはどうすれば修正できますか?
clay-banks--Ni2fpLUgRI-unsplash.jpg -> 173 MB
jake-nackos-_kdX2vPc33U-unsplash.jpg -> 427 MB
73-738467_nature-wallpapers-high-quality-images-hd-desktop-images.jpg -> 125 MB
答え1
少なくともGNUベースのシステムでは、必要な形式を使用してstat
取得できる必要があります。たとえば、次のようになります。numfmt
find . -type f -size +10M -printf "%f -> " -exec sh -c '
stat -c "%s" "$1" | numfmt --to-unit=1048576 --format="%.0f MB"
' sh {} \;
MBまたはMiBが必要かどうかに応じて--to-unit=1048576
変更してください。--to-unit=1000000
答え2
ast-open実装にアクセスできる場合ls
:
find . -type f -size +10M -exec ls -ldh --format='%(name)s -> %(size)dB' {} +
MiB
、、GiB
……TiB
サフィックスは適切な場合に使用されます。
の場合、zsh
すべてのシステムで(組み込み機能のみを使用)、MiBのみ(最も近い値に丸められます):
zmodload zsh/stat
stat -LnA info +size -- **/*(D.LM+10)
for f s ($info) printf '%s -> %.0fMiB\n' $f $(($s / 1048565.))
答え3
ゲームは終わり、@steeldriverが勝利しました。+1;-)しかし、別の方法(多分もっと簡単でしょうか?)を使います。
$ find . -type f -size +10M -printf "%f\0%s\n" | awk -F'\0' '{printf("%s -> %.0f MB\n", $1,$2/1048576)}'