Решения тех проблем, с которым мне приходилось сталкиваться.

понедельник, 25 февраля 2008 г.

Размер всех файлов в директории

Задача: просуммировать размер всех файлов в директории. Первое, что приходит на ум - использовать команду du.


du -hs

Но она показывает размер, занимаемый файлами (и под-директориями!) на диске. А часто нужно посчитать именно кол-во байтов во всех файлах. Тогда можно сделать так:

find . -type f -exec ls -l \{\} \; | awk '{s+=$5} END {print s}'

Так как find весьма мощная утилита, то изменяя ее параметры можно подсчитать суммарный объем данных в файлах, удовлетворяющих заданным условиям.

Как правильно подсказали в комментариях, есть еще более короткое и правильное решение:

find . -type f -printf '%s\n' | awk '{SUM+=$1} END {print SUM}'

3 комментария:

Gimly комментирует...

Недавно открыл для себя удивительные графические инструменты для наглядного представления чем занято пространство на диске и разделе.

Можно производить поиск того, что следует в первую очередь сносить на диске, видеть организацию занятого (и свободного) пространства по типам файлов, и вообще интересно видеть красиво организованные структуры :)

Удобно администрировать сильно вложенные пользовательские папки - находить там фильмы, музыку, дубликаты программ - всё что можно переносить на общий доступ или исключать из бекапа :)
Первая мне показалась более красивой - так что я нашёл её аналог для win.

Kdirstat - KDE
gdmap - GNOME
WinDirStat - Windows (GPL)

Всем при запуске (или из командной строки) нужно указать папку или диск для сканирования.

Gimly комментирует...

А приведённый пример по подсчёту байтов я бы немного упростил :)

find . -type f -printf '%s\n' | awk '{SUM+=$1} END {print SUM}'

find действительно мощная утилита :)

morridzh комментирует...

Упрощение принимается, решение получается еще более элегантным :)