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

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

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

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

254 голоса | спросил 2ndkauboy 11 J000000Sunday10 2010, 21:26:29

9 ответов


364

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

du -sh /*

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

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

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

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

du -sh /* | sort -h

Здесь:

  • -h гарантирует, что sort правильно интерпретирует понятные для человека суффиксы.
ответил Thomas 11 J000000Sunday10 2010, 21:28:23
70

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

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

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

ответил Janne Pikkarainen 29 J000000Thursday10 2010, 16:07:31
14

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

ответил BuddhaLincoln 24 ThuEurope/Moscow2015-12-24T13:07:52+03:00Europe/Moscow12bEurope/MoscowThu, 24 Dec 2015 13:07:52 +0300 2015, 13:07:52
9

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

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

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

    du -sh ./*
    
ответил Martin 22 42012vEurope/Moscow11bEurope/MoscowThu, 22 Nov 2012 20:53:04 +0400 2012, 20:53:04
6

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

du -d 1 /
ответил Philipp 11 J000000Sunday10 2010, 21:29:10
3

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

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

du -h | sort -h

Это утопит вас в тонне небольших файлов. Вы можете избавиться от них с помощью - threshold (1 MB в моем примере):

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

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

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

find. -тип d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h
ответил Aaron Digulla 24 J000000Friday15 2015, 14:04:13
1

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

ответил Jimmy Koerting 5 +04002013-10-05T19:36:58+04:00312013bEurope/MoscowSat, 05 Oct 2013 19:36:58 +0400 2013, 19:36:58
0

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

ответил sleske 12 J000000Monday10 2010, 23:42:17
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 может пригодиться!

ответил J.M. Stoorvogel 20 TueEurope/Moscow2016-12-20T12:56:34+03:00Europe/Moscow12bEurope/MoscowTue, 20 Dec 2016 12:56:34 +0300 2016, 12:56:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132