CLI AI

Какая папка съела диск? du с сортировкой по размеру

2026-05-22

du -h --max-depth=1 . | sort -rh показывает один уровень дерева, крупное сверху. Дальше вы повторяете то же самое внутри самой большой записи, пока не найдёте виновника. Техника — это именно спуск, а не одна хитрая команда.

1. Один уровень, крупное сверху

clai
$ clai покажи размеры папок здесь на один уровень вглубь, крупные сверху→ du -h --max-depth=1 . | sort -rh348K	.296K	./a52K	./c

sort -rh правильно сортирует человекочитаемые размеры — он знает, что 2G больше 900M, а обычный sort -r этого не знает.

2. Идти туда, где размер

clai
$ clai теперь то же самое внутри самой большой папки→ du -h --max-depth=1 ./a | sort -rh

Двух-трёх таких итераций обычно хватает. Это быстрее полного обхода дерева, потому что вы вообще не читаете ветки, которые не важны.

3. Не считать чужие файловые системы

clai
$ clai посчитай размер / но не выходи за пределы этой файловой системы→ du -shx /348G	/

-x не даёт du спускаться в другие точки монтирования. Без него обход / уходит в /mnt, сетевые шары и bind-монтирования и выдаёт число, не имеющее отношения к диску, который вы освобождаете.

4. Самые большие отдельные файлы

clai
$ clai найди 10 самых больших файлов внутри /var→ sudo find /var -xdev -type f -printf '%s\t%p\n' | sort -rn | head -10

Иногда виновата не папка, а один лог на 40 ГБ. -xdev — это то же самое, что du -x, но для find.

5. Посмотреть интерактивно

clai
$ clai дай посмотреть занятое место в /var интерактивно→ ncdu -x /var

ncdu сканирует один раз и даёт ходить по дереву стрелками, удаляя по дороге. Если вы собираетесь запускать du больше двух раз — поставьте лучше его.

6. Запускать там, где разрешено читать всё

clai
$ clai просканируй / по размерам папок без шума про права доступа→ sudo du -h --max-depth=1 -x / 2>/dev/null | sort -rh | head

Без sudo du молча пропускает каталоги, куда не может войти, и занижает результат. С ним 2>/dev/null убирает шум от файлов, исчезнувших посреди обхода.

Грабли

  • du меряет занятые блоки, а не содержимое файлов. Миллион однобайтовых файлов занимает куда больше миллиона байт. Второе число показывает du --apparent-size.
  • Если du и df сильно расходятся — остановитесь. Это другая проблема: удалённые файлы, которые держат открытыми, или кончившиеся иноды. Ссылка ниже.
  • --max-depth есть только в GNU. На macOS эквивалент — du -d 1, а sort -rh требует свежего BSD sort или coreutils.

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

Почему du такой медленный? Он делает stat на каждый файл в дереве. На сетевых файловых системах или миллионах мелких файлов это действительно медленно — сужайте путь или берите ncdu, который хотя бы кэширует обход.

Чем du -s отличается от du -h --max-depth=1? -s печатает один итог по всему пути, --max-depth=1 — по строке на каждого потомка. -s берите, когда уже знаете, куда смотреть.

Как найти папки больше заданного размера? Пропустите через awk: du -m --max-depth=2 . | awk '$1 > 1000' выведет всё крупнее 1 ГБ.

Читайте также

Попросите нужные размеры папок — du, sort -rh и -x напишет CliAI. Установка одной строкой.