バイトではなくMB単位でサイズを指定するために、findコマンドで-printf "%s \ n"をどのように変更しますか?

バイトではなくMB単位でサイズを指定するために、findコマンドで-printf

ファイルサイズを表示する簡単なヘルパー関数を書いています。
これまでのコードは次のとおりです。

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

おすすめ記事