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

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

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

но я хочу иметь только суммарный размер всех каталогов в корневой папке файловой системы. Быть там любая команда, чтобы достичь этого?

266
задан Kamil Maciorowski 2010-07-11 21:26:29
источник

9 ответов

это то, что вы ищете:

du -sh /*

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

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

    Примечание: dotfiles не включены; run shopt -s dotglob включить эти слишком.

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

du -sh /* | sort -h

здесь:

  • -h обеспечивает sort правильно интерпретирует читаемые человеком суффиксы.
374
отвечен Thomas 2018-08-01 12:17:20
источник

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

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

в этом случае размеры будут указаны в мегабайтах.

71
отвечен Janne Pikkarainen 2014-02-26 21:14:19
источник

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

15
отвечен BuddhaLincoln 2015-12-24 15:57:22
источник

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

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

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

    du -sh ./*
    
9
отвечен Martin 2012-11-22 21:19:56
источник

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

du -d 1 /
6
отвечен Philipp 2010-07-11 21:29:10
источник

это не так просто. The 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
3
отвечен Aaron Digulla 2015-07-24 14:04:13
источник

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

1
отвечен Jimmy Koerting 2013-10-05 19:36:58
источник

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

0
отвечен sleske 2010-07-12 23:42:17
источник

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

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

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

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

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

0
отвечен J.M. Stoorvogel 2016-12-20 12:56:34
источник

Другие вопросы linux unix console

X