du -h --max-depth=1 . | sort -rh показывает один уровень дерева, крупное сверху. Дальше вы повторяете то же самое внутри самой большой записи, пока не найдёте виновника. Техника — это именно спуск, а не одна хитрая команда.
1. Один уровень, крупное сверху
$ clai покажи размеры папок здесь на один уровень вглубь, крупные сверху→ du -h --max-depth=1 . | sort -rh348K .296K ./a52K ./c
sort -rh правильно сортирует человекочитаемые размеры — он знает, что 2G больше 900M, а обычный sort -r этого не знает.
2. Идти туда, где размер
$ clai теперь то же самое внутри самой большой папки→ du -h --max-depth=1 ./a | sort -rh
Двух-трёх таких итераций обычно хватает. Это быстрее полного обхода дерева, потому что вы вообще не читаете ветки, которые не важны.
3. Не считать чужие файловые системы
$ clai посчитай размер / но не выходи за пределы этой файловой системы→ du -shx /348G /
-x не даёт du спускаться в другие точки монтирования. Без него обход / уходит в /mnt, сетевые шары и bind-монтирования и выдаёт число, не имеющее отношения к диску, который вы освобождаете.
4. Самые большие отдельные файлы
$ 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 дай посмотреть занятое место в /var интерактивно→ ncdu -x /var
ncdu сканирует один раз и даёт ходить по дереву стрелками, удаляя по дороге. Если вы собираетесь запускать du больше двух раз — поставьте лучше его.
6. Запускать там, где разрешено читать всё
$ 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 ГБ.
Читайте также
- Хватит запоминать флаги find: просто попросите то, что нужно
- df говорит, что диск полон, du — что нет
- Docker съел диск: как вернуть место
Попросите нужные размеры папок — du, sort -rh и -x напишет CliAI. Установка одной строкой.