[расширенная версия]
Это будет намного быстрее и точнее, чем исходная версия ниже, и будет выводить сумму всех размеров файла в текущем каталоге:
echo `find . -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
stat -c %s
команда на файл будет возвращать его размер в байтах. Приведенная tr
здесь команда используется для преодоления xargs
ограничений команды (по-видимому, конвейерная xargs
линия разбивает результаты на большее количество строк, нарушая логику моей команды). Следовательно tr
, позаботьтесь о замене перевода строки +
знаком (плюс). sed
имеет единственную цель - удалить последний +
знак из результирующей строки, чтобы избежать жалоб со стороны последней bc
(базовой калькулятора) команды, которая, как обычно, выполняет вычисления.
Производительность: я протестировал его в нескольких каталогах и более чем на ~ 150 000 файлов сверху (текущее количество файлов в моем ящике fedora 15), получив, как мне кажется, потрясающий результат:
# time echo `find / -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
12671767700
real 2m19.164s
user 0m2.039s
sys 0m14.850s
На всякий случай, если вы хотите провести сравнение с du -sb /
командой, она выведет примерное использование диска в байтах ( -b
опция)
# du -sb /
12684646920 /
Как я и ожидал, это немного больше, чем расчет моей команды, потому что du
утилита возвращает выделенное пространство для каждого файла, а не фактическое использованное пространство.
[исходная версия]
Вы не можете использовать du
команду, если вам нужно знать точный общий размер вашей папки, потому что (согласно ссылке на справочную страницу) du
оценивается использование файлового пространства. Следовательно, это приведет вас к неправильному результату, приближению (возможно, близкому к размеру суммы, но, скорее всего, больше, чем фактический размер, который вы ищете).
Думаю, на ваш вопрос можно ответить по-разному, но это мой:
ls -l $(find . -type f | xargs) | cut -d" " -f5 | xargs | sed 's/\ /+/g'| bc
Он находит все файлы в папке. каталог (измените. на любой каталог, который вам нравится), также включаются скрытые файлы и (использование xargs
) выводит их имена в одной строке, а затем создает подробный список с использованием ls -l
. Этот (иногда) огромный вывод передается по конвейеру в команду вырезания, и только пятое поле ( -f5
), которое представляет собой размер файла в байтах, берется и снова передается по конвейеру, в результате xargs
чего снова создается одна строка размеров, разделенная пробелами. Теперь выполните магию sed, которая заменяет каждое пустое место +
знаком плюс ( ) и, наконец, bc
(базовый калькулятор) выполняет математические вычисления.
Может потребоваться дополнительная настройка, и у вас может быть ls
команда, которая жалуется на слишком длинный список аргументов.