बाइट्स में "फ़ाइलों और उपनिर्देशिकाओं में सभी डेटा का कुल योग" प्राप्त करने के लिए कम से कम तीन तरीके हैं जो विंडोज के लिए लिनक्स / यूनिक्स और गिट बैश दोनों में काम करते हैं, जो कि औसत से सबसे तेज से सबसे धीमी गति से नीचे सूचीबद्ध हैं। आपके संदर्भ के लिए, वे एक काफी गहरी फ़ाइल सिस्टम ( docroot
एक Magento 2 एंटरप्राइज़ स्थापना में 30,027 निर्देशिकाओं में 71,158 फ़ाइलों को शामिल करते हुए) के मूल में निष्पादित किए गए थे ।
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
ये दोनों भी काम करते हैं, लेकिन वे उन आदेशों पर भरोसा करते हैं जो विंडोज के लिए गिट बैश पर मौजूद नहीं हैं:
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
वास्तव में प्रत्येक फ़ाइल में बाइट्स की संख्या दिखाती है, न कि डिस्क स्थान की मात्रा। क्या यह आपकी आवश्यकताओं के लिए पर्याप्त है?