277

Допустим, я хочу получить размер каждого каталога файловой системы Linux. Когда я использую ls -la я не получаю суммарный размер папок.

Если я использую df я получаю размер каждой смонтированной файловой системы, но это также не помогает мне. А с помощью du я получаю размер каждого подкаталога и сводку всей файловой системы.

Но я хочу иметь только суммарный размер каждого каталога в папке ROOT файловой системы. Есть ли команда для этого?

9 ответов9

391

Это делает то, что вы ищете:

du -sh /*

Что это значит:

  • -s чтобы дать только сумму для каждого аргумента командной строки.
  • -h для удобочитаемых суффиксов, таких как M для мегабайт и G для гигабайт (необязательно).
  • /* просто распространяется на все каталоги (и файлы) в / .

    Примечание: точечные файлы не включены; запустите shopt -s dotglob чтобы включить их тоже.

Также полезна сортировка по размеру:

du -sh /* | sort -h

Вот:

  • -h гарантирует, что sort правильно интерпретирует удобочитаемые суффиксы.
72

Мне часто нужно найти самые большие каталоги, поэтому, чтобы получить отсортированный список, содержащий 20 самых больших каталогов, я делаю это:

du -m /some/path | sort -nr | head -n 20

В этом случае размеры будут сообщаться в мегабайтах.

17

Мне нравится использовать Ncdu для этого, вы можете использовать курсор для навигации и просмотра структуры каталогов, это работает очень хорошо.

10

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

  1. Очень простой цикл, но для меня это было хорошее начало для некоторых других операций, связанных с размером:

    for each in $(ls) ; do du -hs "$each" ; done
    
  2. Очень похоже на первый ответ и почти такой же результат, как 1.), но мне потребовалось некоторое время, чтобы понять разницу от * до ./* в подкаталоге:

    du -sh ./*
    
7

Следующий вызов du должен работать в системах BSD:

du -d 1 /
4

Это не легко. Команда du показывает файлы и папки (по умолчанию) или только размеры всех элементов, которые вы указываете в командной строке (опция -s).

Чтобы получить самые большие элементы (файлы и папки), отсортированные, с удобочитаемым размером в Linux:

du -h | sort -h

Это похоронит вас в куче маленьких файлов. Вы можете избавиться от них с --threshold (1 МБ в моем примере):

du --threshold=1M -h | sort -h

Преимущество этой команды в том, что она содержит скрытые папки с точками (папки, начинающиеся с .).

Если вы на самом деле просто хотите получить папки, вам нужно использовать find но это может быть очень и очень медленным, так как du придется сканировать много папок несколько раз:

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h
1

Имейте в виду, что вы не можете сравнивать каталоги с du на разных системах / машинах, не будучи уверенными, что оба имеют одинаковый размер блока файловой системы. Это может иметь значение, если вы пересылаете некоторые файлы с Linux-машины на NAS и хотите сравнить синхронизированный каталог самостоятельно. Вы можете получить разные результаты с du из-за разных размеров блоков ....

0

Вы можете использовать ls вместе с awk:

ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'

Вывод ls передается в awk . awk начинает обработку данных. Стандартным разделителем является пробел. Переменная суммы tot инициализируется нулем; следующий оператор выполняется для каждой строки / строки, выводимой ls . Это лишь увеличивает tot с размером. $5 обозначает пятый столбец (выводится ls). В конце мы делим на (1024 * 1024) сумму в мегабайтах.

Если вы захотите преобразовать это в скрипт или функцию (.bashrc), вы также можете использовать его для получения размера определенных подмножеств каталогов в соответствии с типами файлов.

Если вам нужна общесистемная информация, kdirstat может пригодиться!

0

Вы также можете проверить xdiskusage. Предоставит вам ту же информацию, но показанную графически, плюс позволит развернуть (очень полезно). Есть и другие подобные утилиты для KDE и даже Windows.

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