Vom Benutzer lesbare Dateigrößen sortieren

11665
notnoop

Wie kann ich eine Liste sortieren, indem eine von Menschen lesbare Dateigröße verwendet wird, eine numerische Sortierung, die die Größenkennung (G, M, K) berücksichtigt? Kann ich du -shzum Beispiel die Ausgabe sortieren ?

Problem: Betrachten Sie das Problem, Dateien / Ordner aufzulisten und nach ihrer Größe zu sortieren. Sie können dies erreichen, indem Sie Folgendes ausführen:

du -s * | sort -n 

Dadurch werden die Dateien / Ordner nach ihrer Größe sortiert. Der Wert für die gedruckte Größe ist jedoch in Byte (oder Megabyte oder Gigabyte, falls Sie dies wünschen).

Es wäre wünschenswert, nach den vom Menschen lesbaren Werten sortieren zu können, damit ich etwas analog ausführen kann

du -sh * | <human-readable file sort> 

Und 1,5GB Ordner werden nach 2.0M angezeigt.

16

7 Antworten auf die Frage

27
Jason Axelson

Verwenden Sie GNU coreutils> = 7.5:

du -hs * | sort -h

(Von dieser Serverfault-Frage genommen )

Man Seite

Bearbeiten: Sie können Ihre Versionen überprüfen, indem Sie du --versionund sort --versionob Sie die GNU-Versionen verwenden. Wenn Sie Homebrew verwenden, müssen Sie möglicherweise gduund verwenden gsort.

OSX hat diese Option nicht. Sie können homebrew verwenden, um 'brew install coreutils' aufzubauen (wobei allen coreutils-Befehlen ein 'g' vorangestellt wird). Sie können dann gdu -hs * | tun gsort -h`. dsummersl vor 10 Jahren 7
Nur um den Punkt von @ dsummersl zu verdeutlichen: Das `du -hs *` funktioniert gut unter Mac OS X, aber sort -h gibt `sort: invalid option-h` zurück. Sie können das coreutils-Paket auch über MacPorts installieren, wie hier beschrieben (http://tunafreedolphin.com/?p=416). jvriesem vor 10 Jahren 1
4
nagul

Afaik, dafür gibt es keinen Standardbefehl.

Es gibt verschiedene Problemumgehungen, die besprochen wurden, als dieselbe Frage bei Stack Overflow erneut gestellt wurde: Wie kann ich die Ausgabe von -h nach Größe sortieren?

3
Patrick

Wenn Sie sich nur Sorgen um Dateien machen, die größer als 1 MB sind, so wie Sie es scheinen, können Sie sie mit diesem Befehl sortieren und mit awk die Größe in MB konvertieren:

du -s * | sort -n | awk '' 

Auch hier werden die Größen auf den nächsten MB gerundet. Sie können die Konvertierung in die Einheit Ihrer Wahl ändern.

Dies ist ähnlich wie: du -sm * | sort -n`. `-s` /` -g` macht 'du'-Ausgabegrößen in Megabytes / Gigabytes. notnoop vor 15 Jahren 0
Für MB musst du durch 1024 mehr teilen. Es wird also `int ($ 1 / (1024 * 1024))` sein Pratik Khadloya vor 10 Jahren 0
2
Mark Crossfield

Dieser übernimmt die Dateinamen mit Leerzeichen oder Apostrophe und arbeitet auf Systemen, die nicht unterstützen, xargs -doder sort -h:

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

was in ... resultiert:

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

Hier ist ein anderes:

$ du -B1 | sort -nr | perl -MNumber::Bytes::Human=format_bytes -F'\t' -lane 'print format_bytes($F[0])."\t".$F[1]' 

Möglicherweise müssen Sie ein tun

$ cpan Number::Bytes::Human 

zuerst.

1

du -sk * | sort -n | awk '' | während gelesen f; do du -sh "$ f"; erledigt

1
lukmansh

Dieser Befehl wird nach Größe in MB sortiert

du --block-size=MiB --max-depth=1 path | sort -n 
Das macht der Benutzer eigentlich schon, er hat das Beispiel mit MiB nicht gegeben, aber darüber gesprochen. Was er / sie sucht, ist, in der Lage zu sein, zu sortieren, wenn er die `-h`-Flagge verwendet. Tonin vor 11 Jahren 0