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


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

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

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


258
2017-07-11 17:26


происхождения


--total флаг был полезен для меня. Например. du -sh --total applications/*, askubuntu.com/a/465436/48214 - Ryan


ответы:


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

du -sh /*

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

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

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

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

du -sh /* | sort -h

Вот:

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

366
2017-07-11 17:28



Если у вас есть точечные каталоги в корневом каталоге, вы можете использовать shopt -s dotglob включить их в подсчет. - Philipp
Это очень полезно, потому что это просто, и вы можете указать, какой путь вы хотите, а не /*, например. ./ для текущего каталога или ./* для каждого элемента в текущем каталоге. - psur
@psur, или вы можете использовать ./*/ получить только подпапки и не все элементы - relascope
Сортировка: du -sh /* | sort -h - Vu Anh
@ c1phr Если ваш sort не имеет -h, вам нужно оставить это du также, в противном случае сортировка будет перемешивать килограмм / мега / гигабайт. du -s /* | sort -nr, - Thomas


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

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

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


70
2017-07-29 12:07



Вот способ сделать его более читаемым. Du -sh / some / path | sort -hr | head -n 20 - Xedecimal
@Xedecima проблема с использованием h - сортировка не знает, как обрабатывать разные размеры. Например, 268K сортируется выше 255M, и оба сортируются выше 2.7G - chrisan
Символ -h (удобочитаемый) для команды сортировки должен правильно читать эти значения. Так же, как флаг du -h экспортирует их. В зависимости от того, что вы используете, я угадываю. - Xedecimal
Работает в Ubuntu 16.04. Хороший совет. - SDsolar


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


14
2017-12-24 10:07





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

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

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

    du -sh ./*
    

9
2017-11-22 16:53





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

du -d 1 /

6
2017-07-11 17:29



мой du (Ubuntu 10.4) не имеет -d вариант. В какой системе вы работаете? - Thomas
На моем openSUSE у него нет опции -d :( - 2ndkauboy
Хорошо, тогда это только опция BSD (я на OS X). - Philipp
Правильная переносная комбинация опций на BSD / * NIX du -sk /*, Я ненавижу -k вещи soooo много. Linux» -h полностью скалы. - Dummy00001
в других системах, его --max-depth - Vishnu Kumar


Это непросто. 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
2017-07-24 11:04



--threshold ^^^ эта опция не используется в linux - podarok
@podarok Он доступен на OpenSUSE 13.2 Linux. Попробуйте найти более новую версию своего дистрибутива или самостоятельно составить более новую версию пакета. - Aaron Digulla
Он не работает на Ubuntu LTS (14.04). Это самый последний)) - podarok
@podarok Какая версия GNU coreutils? Шахта - 8,24. - Aaron Digulla
Кэширование могло быть плохим. Я думал о чем-то вроде этого в этом порту superuser.com/a/597173/121352 где мы сканируем содержимое дисков один раз в сопоставление, а затем продолжаем использовать данные из этого сопоставления, а не снова ударять диск. - Hennes


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


1
2017-10-05 15:36





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


0
2017-07-12 19:42