Задать вопрос

Как подсчитывать объем папки в реальном времени?

Здравствуйте.

Есть несколько директорий, где тысячи файлов. При использовании du с разными ключами, так или иначе, приходится ждать до конца отработки. Это неудобно, так как в винде система начнет считать объем и количество файлов в реальном времени и у тебя уже складывается правильное впечатление о содержании папки, той информации может быть уже достаточно. Ты уже можешь принять решение, копать дальше и так далее. Как сделать что-то подобное в командной строке линукс?
  • Вопрос задан
  • 878 просмотров
Подписаться 2 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 6
@pfg21
ex-турист
подключиться к inotify. но нему прокидывают все изменения в файловой системе.
фильтровать поток по необходимым путям и действиям и далее перечитывать статус измененных файлов.
получишь размер каталогов прям в онлайн.
Ответ написан
Комментировать
karabanov
@karabanov Куратор тега Linux
Системный администратор
ncdu - один раз подождать (совсем не долго даже если тысячи фалов) и потом наглядно увидеть, где чего и сколько, а затем удобно оттуда же удалить.
Ответ написан
Комментировать
xotkot
@xotkot
хорошо есть и хорошо весьма
ncdu -1 /path/to/folder/
ncdu -q -1 /path/to/folder/ (интервал 2 сек)
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
du -s /path/to/folder/ разве не даёт такой информации?
Ответ написан
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
32-строчный эмулятор счётчика в Explorer.exe на Пайтоне. Cчитает всё без разбора, поэтому на /dev и другие блочные девайсы направлять не рекомендуется :)
#!/usr/bin/python3
import os,sys
sumSizes = 0
countFiles = 0
countDirs = 0


def reDraw(size):
    global sumSizes
    sumSizes += size
    outString = '\r{0} bytes total, {1} directories and {2} files...'.format(sumSizes, countDirs, countFiles)
    print(outString, end='')

def getSizeRecursively(path):
    global countDirs
    global countFiles
    try:
        for entry in os.scandir(path):
            if not entry.is_dir(follow_symlinks=False):
                countFiles += 1
                try:
                    reDraw(entry.stat().st_size)
                except:
                    continue
            else:
                countDirs +=1
                reDraw(entry.stat(follow_symlinks=False).st_size)
                getSizeRecursively(entry.path)
    except OSError:
        pass

getSizeRecursively(sys.argv[1])
Ответ написан
Комментировать
hint000
@hint000
у админа три руки
Вопрос надо бы исправить, хотите статистику по самым толстым папкам, а спрашиваете совсем другое. Хорошие ответы про ncdu. Добавлю ещё вариант с GUI, это baobab. Очень наглядно, наводите мышку на разные сектора и видите подсказки:
5e1bcdab9e72b622125239.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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