Linux / Unix 및 Windows 용 Git Bash에서 작동하는 "파일 및 하위 디렉터리의 모든 데이터 합계"를 바이트 단위로 가져 오는 방법에는 최소 세 가지 방법이 있습니다. 아래에 나열된 것은 평균적으로 가장 빠른 것에서 가장 느린 것입니다. 참고 docroot
로이 파일은 상당히 깊은 파일 시스템의 루트에서 실행되었습니다 ( 30,027 개 디렉토리에 71,158 개 파일로 구성된 Magento 2 Enterprise 설치에서).
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
삼.
$ 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
이 두 가지도 작동하지만 Windows 용 Git Bash에없는 명령에 의존합니다.
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
실제로 디스크 공간이 아니라 각 파일의 바이트 수를 표시합니다. 이 정도면 충분합니까?