16

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

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

du -s * | sort -n

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

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

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

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

7 ответов7

27

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

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

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

Man страница

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

4

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

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

3

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

du -s * | sort -n | awk '{print int($1 / 1024)"M\t"$2}'

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

2

Он обрабатывает имена файлов с пробелами или апострофами и работает в системах, которые не поддерживают 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
1

Вот еще один:

$ 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

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

du --block-size=MiB --max-depth=1 path | sort -n
1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .