人間が読めるサイズで数値的にソートするにはどうすればよいですか?


20

たとえば、フォルダに必要なスペースを示すコマンドがあります

du folder | sort -n

それはうまくいきますが、人間が読める形式にしたいです

du -h folder

ただし、それを行うと、数値としてソートできません。

結合しdu folderdu -h folder出力をとしてソートする方法du folder、ただし最初の列をdu -h folder

PSこれはほんの一例です。このテクニックは私にとって非常に役立つかもしれません(可能な場合)

回答:


11

これがより一般的なアプローチです。出力を取得du folderし、du -h folder2つの異なるファイルでは。

du folder > file1
du -h folder > file2

重要な部分は次のとおりです。適切な区切り文字を使用して、連結file1およびfile2行ごとに。

paste -d '#' file1 file2 > file3

(およびに#表示されないと仮定)file1file2

並べ替えますfile3。これは、file1コンテンツに基づいて並べ替えられ、file2コンテンツごとにタイを分割することに注意してください。以下を使用して関連する結果を抽出しますcut

sort -n -k1,7 file3 | cut -d '#' -f 2

また、見てみましょうman sort他のオプションについて。


後で再利用するために、これをエイリアスとして保存することもできます。これを行うには、以下を以下に追加します~/.bashrc

sorted-du () {
    paste -d '#' <( du "$1" ) <( du -h "$1" ) | sort -n -k1,7 | cut -d '#' -f 2
}

次に、新しいターミナルセッションを開き、新しいエイリアスを実行します。

sorted-du /home

ソリューションをエイリアスにする方法の最後の部分を追加しました。
サーチャーロ

1
エイリアスで実際のファイルを使用する(そしてそれらに対してrmを呼び出す)ことは本当に悪い考えです!file3ディレクトリに名前の付いたファイルが実際にあった場合、どうなるかを考えてみてください。上書きされてから削除されます。@SirCharloこの回答からエイリアス定義を削除し、より安全なものに置き換えています。
jmiserez

まあaskubuntu.com/a/80248/22308単純でこれを行うsort -h
ナムG VU

36

次のようなものを試してください:

du -h folder | sort -h

代替案:-n数値ソート用

注:-hsortオプションは、Ubuntuの新しいバージョンにのみ存在します。


3
バージョン8.17があるので、これが最も簡単な方法だと思います
-steabert

1
sortコマンドがsort --version = 8.17から改善されたことを指摘してくれたsteabertに感謝します。これは、Ubuntuの新しいバージョンのベストアンサーです。
キャットアムステルダム

これは、OPを解決するクリーンシュートの原因として受け入れられるものである必要がありますsort -h
Nam G VU

4

この回答は、Ubuntuの10.04.4LTS以前のバージョンで有効です。

残念ながら、KMGを分類する正確な答えは難しく、複雑です。

duコマンド全体を、これを使用して人間が読める形式にソートするものにエイリアスできます。

alias duf='du -sk * | sort -n | perl -ne '\''($s,$f)=split(m{\t});for (qw(K M G)) {if($s<1024) {printf("%.1f",$s);print "$_\t$f"; last};$s=$s/1024}'\'

ここで見つけた

http://www.earthinfo.org/linux-disk-usage-sorted-by-size-and-human-readable/

ちょうどCDあなたがお知りになりたいフォルダにDUF

このdufエイリアスを/home/user/.profileの最後に追加して、dufコマンドを半永久的にすることができます。

結果:

user@hostname:~$ duf
0.0K  Documenten
0.0K  Muziek
0.0K  Openbaar
0.0K  Sjablonen
0.0K  Video's
4.0K  backup_db.sql.g
4.0K  examples.desktop
12.0K xml printer ticket
52.0K hardinfo_report.html
152.0K    librxtxSerial.so
2.7M  jpos
4.4M  nxclient_3.5.0-7_amd64.deb
6.4M  nxnode_3.5.0-4_amd64.deb
6.8M  Downloads
7.4M  nxserver_3.5.0-5_amd64.deb
12.4M NetBeansProjects
18.1M mysqlworkbench.deb
28.3M Afbeeldingen
45.8M ergens-20110928-18.sql.gz
60.5M 2012-06-02ergens_archive.tar.gz
65.5M 2012-08-26ergens_archive.tar.gz
65.6M 2012-08-28ergens_archive.tar.gz
65.6M 2012-08-29ergens_archive.tar.gz
65.7M 2012-08-30ergens_archive.tar.gz
113.0M    Bureaublad
306.2M    ergens-20110928-18.sql

ここではdu -sch /var/* | sort -n、MKKMMKKMMKの並べ替えが機能しない理由を説明します。

user@hostname:~$ du -sch /var/* |sort -n

0 /var/crash
0 /var/local
0 /var/lock
0 /var/opt
8,0M  /var/backups
12K   /var/games
16K   /var/tmp
17M   /var/log
68M   /var/cache
104K  /var/spool
144K  /var/run
351M  /var/lib
443M  totaal
704K  /var/mail

ソート機能を使用してdu -h関数を改善する機能をリクエストして、これをgnu-core開発者に報告しました。bugs-coreutils@gnu.org経由
Kat Amsterdam

+1、同様のワンライナー:du folder | sort -n | cut -f 2 | while IFS= read -r -d '' path; do du -sh -- "$path"; done
スティーバート

ライブシステムで1ライナーを試してみました。アクセス拒否エラーが表示され、結果はありません。最初にUbuntuシステムでこのコマンドを試しましたか?私は/ホーム/ユーザー名にフォルダを変更
キャットアムステルダムに

ああ、すみません、をドロップする必要-d ''があります。これは、fileコマンドの出力で使用することからの残りです。
スティーバート

これは、GNUをサポートしていない非Linuxシステムでうまく機能するようですsort
ステファンLasiewski

2

コマンドGNU sortには次のオプションがあります。

-h--human-numeric-sort 人間が読める数字(例:2K 1G)を比較します。

BSD / OSX上でこのオプションを持っているために、あなたがインストールすることができますsortからcoreutils(経由brew)し、あなたにbinフォルダを追加しPATH、あなたへのrcファイル。

したがって、コマンドは次のようになります。

du -ah . | sort -rh | head -20

0

Ubuntuの最新バージョンについては、を使用してくださいdu -h directory | sort -h

制御不能なファイルを見つけるために、常にこの形式を使用しています。


午後5時13 Allu2で答え11月17日'11の重複
エルダーオタク

0

Ctrl+ Alt+でターミナルを開き、次tを入力します。

  du -sk * | sort -rn 

:DIは、Ctrl + Alt + tを上記の形式に変更することに慣れているので、Xpadに必要な形式を貼り付けました。:Dそのような些細な仕事を
compめ

ここで行ったすべての作業は補完に値します。
rɑːdʒɑ

0

これは、空白またはアポストロフィを含むファイル名を処理し、xargs -dまたはをサポートしていないシステムで動作しますsort -h

du -s * | sort -n | cut -f2 | tr '\n' '\0' | xargs -0 -I {} du -sh "{}"

結果:

368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm

交換のポイントは何だ\nとは\0?それには少し遅すぎませんか?
ムル14年

これは、の入力を準備しますxargs -0。これは、(find -print0が生成するように)入力がNULで区切られることを想定しています。それ以外の場合、-0は使用できず、アポストロフィには特別な意味があります。
マーククロスフィールド14年

私は知っていますが-0、無関係です:imgur.com/87w3vfj
muru

アポストロフィではなくバックティックを使用したので、これは機能していると思います。gist.github.com/mrmanc/8aef830945ce03aa65f0
マーククロスフィールド

0

バージョンに関係なくすべてのシステムで動作していることがわかりました(sort -h私には動作しません)

du -h $(du * | sort -n | awk '{print $2}')

awk '{print $2}'基本的にファイル名を出力します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.