Отобразить каждый размер подкаталога в виде списка, используя одну строку в Bash?

101

Я хочу получить список каталогов и их размеры в виде списка, например, как вы получаете, когда вы делаете ls -l.

Дело в том, что есть однострочная команда, которая может это сделать? Я вижу, что другие имеют длинные команды только для вывода этого. Это слишком долго.

Какая команда может сделать это или комбинация команд, которые можно легко набрать? du -hдает это, но он отображает все подпапки, что не то, что я хочу. только текущие каталоги папок.

Патоши パ ト シ
источник

Ответы:

72

Вы, вероятно, хотите увидеть каталоги, упорядоченные по размеру:

$ du -hs * | sort -hr

856M    lib
746M    share
612M    lib64
312M    src
267M    java
239M    bin
179M    sbin
173M    local
93M     i686-w64-mingw32
72M     libexec
26M     include
20M     puppet
772K    X11R6
20K     man
4.0K    games
4.0K    etc
0       tmp
raychi
источник
Это не работает, если в каталоге большое количество записей. bash: /run/current-system/sw/bin/du: Argument list too long
Крис Стрычински
123

Попробуй это

du -h --max-depth=1

Выход

oliver@home:/usr$ sudo du -h --max-depth=1
24M     ./include
20M     ./sbin
228M    ./local
4.0K    ./src
520M    ./lib
8.0K    ./games
1.3G    ./share
255M    ./bin
2.4G    .

альтернатива

Если --max-depth=1это слишком долго для вашего вкуса, вы также можете попробовать использовать:

du -h -s *

Он использует -s( --summarize) и по умолчанию печатает только размер самой папки. Передав все элементы в текущем рабочем каталоге ( *), он --max-depth=1выдаст аналогичный результат :

Выход

oliver@cloud:/usr$ sudo du -h -s *
255M    bin
8.0K    games
24M     include
520M    lib
0       lib64
228M    local
20M     sbin
1.3G    share
4.0K    src

Разница неуловима. Первый подход отображает общий размер текущего рабочего каталога и общий размер всех папок, которые в нем содержатся ... но только до глубины 1.

Последний подход будет рассчитывать общий размер всех пропущенных предметов в отдельности . Таким образом, он включает символическую ссылку lib64в вывод, но исключает скрытые элементы (имя которых начинается с точки). Также не хватает общего размера текущего рабочего каталога, поскольку он не был передан в качестве аргумента.

Der Hochstapler
источник
4
Идеальный ответ. В Mac OSX этот --depthпараметр не распознается. Используйте du -h -d 1для того же результата.
Дилан
2

Стоит упомянуть команду оболочки NCurses Disk Usage .

Ncdu - это анализатор использования дисков с интерфейсом ncurses. Он предназначен для поиска космических свиней на удаленном сервере, где у вас нет полной графической настройки, но это полезный инструмент даже на обычных настольных системах. Ncdu стремится быть быстрым, простым и легким в использовании и должен быть в состоянии работать в любой минимальной POSIX-подобной среде с установленными ncurses.

луч
источник