Назад | Перейти на главную страницу

Рекурсивный поиск самых больших каталогов / файлов

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

231MB bin
 - 220MB ls
  - 190MB dir
  - 15MB def
  - 3MB lpr
 - 10MB asd
 - 1MB link

Как я могу это сделать?

Вы можете увидеть 10 крупнейших каталогов с:

du -cks *|sort -rn|head

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

Скорее всего, в вашей системе один из них установлен или доступен через диспетчер пакетов:

Графический:

  • Баобаб - также известный как Анализатор использования диска - Gnome (Приложения> Стандартные или Приложения> Системные инструменты)
  • KDirStat - KDE
  • Filelight - KDE
  • TreeSize для Unix - GTK2

Текстовые:

  • ncdu - ncurses
  • gt5 - текстовый браузер (lynx, w3m и т. д. - выбирается автоматически) - Это на самом деле сценарий оболочки!

Они могут работать не так, как вы указали, но они должны делать большую часть того, что вам нужно.

Мой вариант ответа Брента:

# du -a | sort -rn | head

Это даст вам самые большие каталоги или файлы в дереве.

Вы можете сделать нечто подобное, используя find:

# find -maxdepth 2 -type d -exec du -sh {} \;

Но это не будет отсортировано по размеру и будет невероятно медленным и неэффективным. Лучше написать сценарий, который разбирает du -a.

(Хотел добавить это как комментарий к ответу Брента, но не вижу ссылки для этого). Недавно у меня была аналогичная проблема, и если вам нужно просто проверить один рассматриваемый раздел, добавление -x в ответ Брента очень полезно, особенно если у некоторых каталогов есть свой раздел.

Так было бы:

du -ckx / | sort -rn | head 

Это дает вам отсортированный удобочитаемый размер 10 самых больших файлов / папок во всем дереве каталогов:

du -ah | sort -hr | head

пример

1019M   .
431M    ./prod
195M    ./prod/mainprogram
180M    ./utils
162M    ./prod/subprogram1
157M    ./.git
156M    ./py
155M    ./.git/objects
148M    ./.git/objects/pack
128M    ./prod/mainprogram/hdf

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

Я бы коротко заглянул в справочную страницу sort - в некоторых системах вы можете использовать sort -h для сортировки удобочитаемого вывода. Я использовал это в CentOS 6.2 с сортировкой 8.4. В противном случае вы можете перенаправить вывод du -h в файл и отсортируйте его примерно так:

for i in K M G; do egrep "^[0-9,\.]+${i}" somefile | sort -n; done

Я не знаю инструмента командной строки, который делает это (кроме того, что предлагали другие ответы), но если вы можете запускать программы с графическим интерфейсом на этом компьютере, попробуйте KDirStat. Он показывает использование диска всеми файлами и каталогами в определенном корне, отсортированное по размеру (по умолчанию).