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

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

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

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

2
задан Kamil Maciorowski
04.02.2023 10:44 Количество просмотров материала 2839
Распечатать страницу

9 ответов

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

du -sh /*

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

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

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

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

du -sh /* | sort -h

здесь:

  • -h обеспечивает sort правильно интерпретирует читаемые человеком суффиксы.
374
отвечен Thomas 2023-02-05 18:32

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

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

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

71
отвечен Janne Pikkarainen 2023-02-05 20:49

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

15
отвечен BuddhaLincoln 2023-02-05 23:06

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

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

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

    du -sh ./*
    
9
отвечен Martin 2023-02-06 01:23

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

du -d 1 /
6
отвечен Philipp 2023-02-06 03:40

это не так просто. 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 2023-02-06 05:57

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

1
отвечен Jimmy Koerting 2023-02-06 08:14

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

0
отвечен sleske 2023-02-06 10:31

можно использовать 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 2023-02-06 12:48

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх