Сортировка удобочитаемых размеров файлов

11174
notnoop

Как я могу отсортировать список, используя удобочитаемую сортировку по размеру файла, числовую сортировку, которая принимает во внимание идентификатор размера (G, M, K)? Могу ли я отсортировать " du -sh" вывод, например?

Проблема: рассмотрите проблему перечисления файлов / папок и сортировки их по размеру. Вы можете достичь этого, запустив:

du -s * | sort -n 

Здесь перечислены файлы / папки, отсортированные по размеру. Однако значение печатного размера указывается в байтах (или мегабайтах, или гигабайтах, если вы выберете).

Было бы желательно иметь возможность сортировки на основе удобочитаемых значений, чтобы я мог выполнить что-то аналогичное

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

И папка 1,5 ГБ появляется после 2.0M.

16

7 ответов на вопрос

27
Jason Axelson

Используйте GNU coreutils> = 7.5:

ду-хс * | сортировать -h

(Взято из этого вопроса о неисправности сервера )

Man страница

Изменить: вы можете проверить свои версии, используя du --versionи sort --versionесли вы используете версии GNU. Если вы используете homebrew, вам может понадобиться использовать gduи gsort.

OSX не имеет этой опции. Вы можете использовать homebrew для `brew install coreutils` (который добавляет все команды coreutils к« g »). Затем вы можете сделать `gdu -hs * | gsort -h`. dsummersl 9 лет назад 7
Просто чтобы прояснить точку зрения @ dsummersl: `du -hs *` отлично работает на Mac OS X, но `sort -h` возвращает` sort: неверный параметр - h`. Можно также установить пакет coreutils через MacPorts, как описано [здесь] (http://tunafreedolphin.com/?p=416). jvriesem 9 лет назад 1
4
nagul

Афаик, для этого нет стандартной команды.

Существуют различные обходные пути, которые обсуждались, когда один и тот же вопрос задавался при переполнении стека: как отсортировать вывод du -h по размеру

3
Patrick

Если вы просто беспокоитесь о файлах размером более 1 МБ, как вам кажется, вы можете использовать эту команду для их сортировки и использовать awk для преобразования размера в МБ:

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

Опять же, это округляет размеры до ближайшего МБ. Вы можете изменить его, преобразовав в единицу по вашему выбору.

Это похоже на: `du -sm * | сортировать `-s` /` -g` делает размеры вывода `du` в мегабайтах / гигабайтах. notnoop 14 лет назад 0
Для MB вы должны разделить еще на 1024. Так что это будет `int ($ 1 / (1024 * 1024))` Pratik Khadloya 9 лет назад 0
2
Mark Crossfield

This one handles filenames with whitespace or apostrophes, and works on systems which do not support xargs -d or sort -h:

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

which results in:

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

Вот еще один:

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

Возможно, вам придется сделать

$ cpan Number::Bytes::Human 

первый.

1

дю -ск * | сортировать -n | awk '' | пока читаешь ф; do du -sh "$ f"; сделанный

1
lukmansh

Эта команда будет сортировать по размеру в МБ

du --block-size=MiB --max-depth=1 path | sort -n 
Это уже то, что пользователь делает на самом деле, он просто не привел пример с MiB, но упомянул об этом. То, что он / она ищет, это возможность сортировки при использовании флага `-h` для du. Tonin 11 лет назад 0