Есть по крайней мере три способа, чтобы получить «полную сумму все данные в файлах и подкаталогах »в байтах, которые работают как в Linux/Unix, так и в Git Bash для Windows, которые перечислены ниже в порядке от самого быстрого до самого медленного в среднем. Для вашей справки они были выполнены в корне довольно глубокой файловой системы (docroot
в установке Magento 2 Enterprise, содержащей 71 158 файлов в 30 027 каталогах).
1.
$ time find -type f -printf '%s\n' | awk '{ total += $1 }; END { print total" bytes" }'
748660546 bytes
real 0m0.221s
user 0m0.068s
sys 0m0.160s
2.
$ time echo `find -type f -print0 | xargs -0 stat --format=%s | awk '{total+=$1} END {print total}'` bytes
748660546 bytes
real 0m0.256s
user 0m0.164s
sys 0m0.196s
3.
$ time echo `find -type f -exec du -bc {} + | grep -P "\ttotal$" | cut -f1 | awk '{ total += $1 }; END { print total }'` bytes
748660546 bytes
real 0m0.553s
user 0m0.308s
sys 0m0.416s
Эти два РБП работа, но они полагаются на команды, которые не существуют на Git Bash для Windows:
1.
$ time echo `find -type f -printf "%s + " | dc -e0 -f- -ep` bytes
748660546 bytes
real 0m0.233s
user 0m0.116s
sys 0m0.176s
2.
$ time echo `find -type f -printf '%s\n' | paste -sd+ | bc` bytes
748660546 bytes
real 0m0.242s
user 0m0.104s
sys 0m0.152s
Если вы хотите общее для текущего каталога, затем добавьте -maxdepth 1
в find
.
Обратите внимание, что некоторые из предлагаемых решений не возвращают точных результатов, поэтому вместо этого я придерживался вышеперечисленных решений.
$ du -sbh
832M .
$ ls -lR | grep -v '^d' | awk '{total += $5} END {print "Total:", total}'
Total: 583772525
$ find . -type f | xargs stat --format=%s | awk '{s+=$1} END {print s}'
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
4390471
$ ls -l| grep -v '^d'| awk '{total = total + $5} END {print "Total" , total}'
Total 968133
'ls' фактически показывает количество байтов в каждом файле, а не объем дискового пространства. Это достаточно для ваших нужд? –