Предположим, я хочу получить размер каждой директории файловой системы Linux. Когда я использую ls -la
Я не получаю суммарного размера папок.
Если я использую df
Я получаю размер каждой смонтированной файловой системы, но это также не помогает мне. И с du
Я получаю размер каждого подкаталога и сводку всей файловой системы.
Но я хочу иметь только обобщенный размер каждого каталога в папке ROOT файловой системы. Есть ли какая-нибудь команда для достижения этого?
Это делает то, что вы ищете:
du -sh /*
Что это значит:
-s
чтобы дать только общее значение для каждого аргумента командной строки.
-h
для удобочитаемых суффиксов, таких как M
для мегабайт и G
для гигабайт (необязательно).
/*
просто расширяется для всех каталогов (и файлов) в /
,
Примечание: dotfiles не включены; бег shopt -s dotglob
включить их тоже.
Также полезно сортировать по размеру:
du -sh /* | sort -h
Вот:
-h
гарантирует, что sort
правильно интерпретирует понятные для человека суффиксы.
Мне часто нужно найти самые большие каталоги, поэтому, чтобы получить отсортированный список, содержащий 20 самых больших дисков, я это делаю:
du -m /some/path | sort -nr | head -n 20
В этом случае размеры будут указаны в мегабайтах.
Мне нравится использовать Ncdu для этого вы можете использовать курсор для навигации и развертки через структуру каталогов, в которой он работает очень хорошо.
Существующие ответы очень полезны, может быть, некоторые новички (как и я) найдут это полезным.
Очень простой цикл, но для меня это было хорошим началом для некоторых других операций, связанных с размером:
for each in $(ls) ; do du -hs "$each" ; done
Очень похоже на первый ответ и почти тот же результат, что и 1.), но мне понадобилось некоторое время, чтобы понять разницу * с ./*, если в подкаталоге:
du -sh ./*
Следующие du
вызов должен работать на BSD-системах:
du -d 1 /
Это непросто. 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
Имейте в виду, что вы не можете сравнивать каталоги с du
на разных системах / машинах без уверенности, оба имеют одинаковый размер блока файловой системы. Это может рассчитывать, если вы rsync некоторые файлы с Linux-машины на nas и вы хотите сравнить синхронизированный каталог по своему усмотрению. Вы можете получить разные результаты с помощью du
из-за разных блокировок ....