it-swarm-ru.tech

Как получить суммарные размеры каталогов и их подкаталогов?

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

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

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

286
2ndkauboy

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

du -sh /*

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

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

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

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

du -sh /* | sort -h

Вот:

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

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

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

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

74
Janne Pikkarainen

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

18
BuddhaLincoln

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

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

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

    du -sh ./*
    
10
Martin

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

du -d 1 /
7
Philipp

Это не легко Команда 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
4
Aaron Digulla

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

1
Jimmy Koerting

Вы можете использовать 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
J.M. Stoorvogel

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

0
sleske