findのprintfを使用して人間が読めるファイルサイズを取得する

findのprintfを使用して人間が読めるファイルサイズを取得する

特定のフォルダを目的の形式で表示する単純なヘルパー関数を作成しています。

find . -maxdepth 1 -not -name "." -printf '[%TY-%Tm-%Td]\t%s\t%f\n' | sort -n

しかし、ファイルサイズをより良い形式で表示したいと思います。私が見つけたこの回答私はそれを使用してというbash関数を作成しますhr

user@host:~$ hr 12345
12M

私は次のように通貨でそれを試しましたfind

find . -maxdepth 1 -not -name "." -printf '[%TY-%Tm-%Td]\t'$(hr %s)'\t%f\n' | sort -n

ただし、引き続きファイルサイズ全体が引き続き表示されます。期待どおりに機能するにはどうすればよいですか?

ベストアンサー1

numfmtfrom gnu coreutils8.21またはそれ以上)を使用して、ファイル名が正常であるとします。

find . -type f -printf '[%TY-%Tm-%Td]\t%s\t%f\n' | numfmt --field=2 --to=iec-i

--padding=--format=オプションを使用すると、出力形式をさらに指定できます。最新バージョン出力精度も設定できます。たとえば、次のようになります。

... |  numfmt --field=2 --to=iec-i --suffix=B --padding=8

または

... |  numfmt --field=2 --to=iec-i  --format='%10.3f'

権限とリンク数の列が気に入らない場合は、次を使用してくださいgnu ls

ls -gohAt --time-style=+%Y-%m-%d

おすすめ記事