K、M、G形式ではなく、人間が読める形式をKB、MB、GBで印刷するには?

K、M、G形式ではなく、人間が読める形式をKB、MB、GBで印刷するには?

私のデスクトップには、ごみ箱にあるファイルの現在のサイズを表示するウィジェットがあります。ウィジェットのコードは次のとおりです。

du -ch ~/.Trash | grep total | cut -c 1-5

これにより、「99M」などの結果が表示されます。しかし、「99MB」(それぞれKB、GB)を表示したいです。この結果を得るには、コードを正しい文字列に置き換えるのに役立ちますか? (「99」と「MB」の間のスペースも参考にしてください) よろしくお願いします!

PS:私はMac OS X 10.11.6を使います。

答え1

フルサイズ値のみを表示するには、-s()オプションを使用します。--summarize

du -sh | sed 's/^\([0-9]*\)\([^B]\).*/\1 \2B/'
  • ([0-9]*\)- フルサイズ値のキャプチャ

  • ([^B]\)B- (バイト、そのまま維持)を除くキャプチャ単位短縮値

答え2

trを使用して末尾のスペースを削除し、echoコマンドで「B」で囲むことができます。

echo "$(du -ch ~ | grep total | cut -c 1-5 | tr -d '[:blank:]')B" | sed 's/\(K\|M\|G\)B/ \1B/'

そうでなければsedそれ:)

du -ch ~ | grep total | cut -c 1-5 | sed 's/\s\+$/B/' | sed 's/\(K\|M\|G\)B/ \1B/'

編集0: デバイスの前のスペースを認識せず、作業を実行するためにsedを追加しました。

答え3

  1. サイズが10Kから99Kの間(42Kなど)の場合、最初の5文字の出力は次のようになります。

            4    2    K    (商標)    /

    (これはパス名引数が/- で始まると仮定します。これはで始まる引数を指定する場合です~。)これは:cut -c 1-5の出力になります42K     /。 (私の考えには両方nnMとも同じ問題があるでしょう。nnGcut -f1大地最初の 5 文字以外の出力文字です。

  2. ディレクトリ名に単語が含まれている場合はどうなりますかtotal?ヒント:各サブディレクトリのデータを生成してから削除するのではgrepなく、全体を作成する方が合理的です。 〜のようにdfgrepdfロマン・ペレクレストは指摘した。-sオプションを指定してこれを実行できます。
  3. 〜のようにdmgnxが指摘しましたK、数字(またはで終わる)がある場合は、追加するだけです。したがって、私の複合ソリューションは次のようになりますMGB

    echo "$(du -sh ~/.Trash | cut -f1)B"
    
  4. こんな!数字と単位の間にスペースを追加したいことを知りませんでした。いいですね。したがって、以下が必要ですsed(または同様のもの)。

    du -sh ~/.Trash | cut -f1 | sed 's/[KMG]$/ &B/'
    

    それとも

    du -sh ~/.Trash | sed 's/^\([0-9.]*\)\([KMG]\).*$/\1 \2B/'
    

    sedディレクトリ名を削除してcut完全に削除する場合)

答え4

強制的かつ任意に:

du -ch ~/.Trash | grep total | cut -c 1-5 | 
  sed -e 's/K$/ KB/; s/M$/ MB/; s/G$/ GB/'

関連情報