FreeBSDでls -shを使用して「人が読める」サイズを達成する

FreeBSDでls -shを使用して「人が読める」サイズを達成する

GNUを使用すると、ls「人間が読める」ファイルサイズを取得できます(K、M、G、...などのサフィックスを追加してキロバイト、メガバイト、ギガバイトなどを意味し、数字は1024以下に保たれます) )-h。もしいいえと一緒に使用してください。ただし、-lでのみ使用してください-s

lsFreeBSDに付属のソフトウェアでこれらの動作をどのように取得しますか?つまり、ls -shFreeBSDでどのように機能しますか?

答え1

この質問に答える方法は、ソースコードを読むことです。

-hこれらのオプションのいずれかが提供されていない場合、エラーは報告されません。

FreeBSDは2001年にこのオプションを追加しました。、OSXの(かなり古い)Userlandよりも先です。 FreeBSD と OSX のマニュアルページには同じ説明があります-h(そして、「ls -lh」は両方に対して機能します)。ただし、以下でのみ機能します-l

新しいロゴを追加し、-hいつ-lオプションを使用すると、ファイルサイズがバイト、キロバイト、メガバイト、ギガバイト、テラバイト、およびペタバイト単位で表示され、桁数を3つ以下に減らすことができます。

答え2

FreeBSdでGNU ls機能を使用するには、以下をインストールしてください。gnulsパッケージそしてエイリアスlsgnuls

基本ソフトウェアを引き続き使用するには、ls次のようにスクリプトを再公開します。du出力をサイズでソートする方法は?)これはすべてのPOSIXシステムに適用されます。

CLICOLOR_FORCE=1 ls | awk '
    function human(x) {
        s="kMGTEPYZ";
        while (x>=1000 && length(s)>1)
            {x/=1024; s=substr(s,2)}
        return int(x+0.5) substr(s,1,1)
    }
    {gsub(/^[0-9]+/, human($1)); print}'

CLICOLOR_FORCEls端末に書き込まなくてもBSDに色を使用させます。一方、ls端末に書き込むのではなく、列の代わりに1行に1つのファイルを受け取ります。 FreeBSDではこのオプションを使用して-C列を取得できますが、行の途中でサイズを見つける必要があるため、後処理スクリプトはより複雑になります。これを試してみてください(テストされていません):

CLICOLOR_FORCE=1 ls -C | awk '
    function human(x) {
        s="kMGTEPYZ";
        while (x>=1000 && length(s)>1)
            {x/=1024; s=substr(s,2)}
        return int(x+0.5) substr(s,1,1)
    }
    {gsub(/(^|  )[0-9]+/, human($1)); print}'

関連情報