Total size of the contents of all the files in a directory
当我使用
我需要文件和子目录中所有数据的总和,如果我打开每个文件并计算字节数,就会得到这些数据。如果我能在不打开每个文件和计数的情况下获得这个奖励点数。
如果您想要"表观大小"(即每个文件中的字节数),而不是磁盘上文件占用的大小,请使用
1 | % du -sbh <directory> |
使用
1 | du -sb DIR |
或者,添加
1 | du -sbh DIR |
CD到目录,然后:
1 | du -sh |
FTW!
最初是在这里写的:https://ao.gl/get-the-total-size-of-all-the-files-in-a-目录/
只是另一种选择:
1 | ls -lAR | grep -v '^d' | awk '{total += $5} END {print"Total:", total}' |
stat的"%s"格式提供文件中的实际字节数。
1 2 3 | find . -type f | xargs stat --format=%s | awk '{s+=$1} END {print s}' |
你可以用你最喜欢的方法来求和。
如果在Embedded系统中使用BusyBox的"du",就无法使用du获得精确的字节,只能获得千字节。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | BusyBox v1.4.1 (2007-11-30 20:37:49 EST) multi-call binary Usage: du [-aHLdclsxhmk] [FILE]... Summarize disk space used for each FILE and/or directory. Disk space is printed in units of 1024 bytes. Options: -a Show sizes of files in addition to directories -H Follow symbolic links that are FILE command line args -L Follow all symbolic links encountered -d N Limit output to directories (and files with -a) of depth < N -c Output a grand total -l Count sizes many times if hard linked -s Display only a total for each argument -x Skip directories on different filesystems -h Print sizes in human readable format (e.g., 1K 243M 2G ) -m Print sizes in megabytes -k Print sizes in kilobytes(default) |
在Linux/Unix和Git Bash for Windows中,至少有三种方法可以获得"文件和子目录中所有数据的总和"(以字节为单位),这些方法按从最快到最慢的平均顺序列出如下。供您参考,它们是在相当深的文件系统的根目录下执行的(在magento 2 Enterprise安装中,
1。
1 2 3 4 5 6 7 | $ time find -type f -printf '%s ' | awk '{ total += $1 }; END { print total" bytes" }' 748660546 bytes real 0m0.221s user 0m0.068s sys 0m0.160s |
2。
1 2 3 4 5 6 | $ 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 |
三。
1 2 3 4 5 6 | $ 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 for Windows上不存在的命令:
1。
1 2 3 4 5 6 | $ time echo `find -type f -printf"%s +" | dc -e0 -f- -ep` bytes 748660546 bytes real 0m0.233s user 0m0.116s sys 0m0.176s |
2。
1 2 3 4 5 6 7 | $ time echo `find -type f -printf '%s ' | paste -sd+ | bc` bytes 748660546 bytes real 0m0.242s user 0m0.104s sys 0m0.152s |
如果只需要当前目录的合计,则将
请注意,一些建议的解决方案不能返回准确的结果,因此我将继续使用上面的解决方案。
1 2 3 4 5 6 7 8 9 10 11 12 | $ 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 |
创建文件夹时,许多Linux文件系统分配4096字节来存储关于目录本身的一些元数据。随着目录的增长,这个空间增加了4096字节的倍数。
du命令(带或不带-b选项)使用count这个空格,正如您可以看到键入:
1 | mkdir test && du -b test |
空目录的结果为4096字节。因此,如果在目录中放入2个10000字节的文件,du-sb给出的总大小将是24096字节。
如果你仔细阅读这个问题,这不是问题所在。提问者问:
the sum total of all the data in files and subdirectories I would get if I opened each file and counted the bytes
在上面的示例中,应该是20000字节,而不是24096字节。
因此,正确答案imho可以是Nelson answer和hlovdal suggestion的混合,用于处理包含空格的文件名:
1 | find . -type f -print0 | xargs -0 stat --format=%s | awk '{s+=$1} END {print s}' |
1 | find . -type f -printf"%s +" | dc -e0 -f- -ep |
在这里,
因此,为了得到完整的程序,我们需要在从stdin执行序列之前将
要在mib中打印尺寸,如
这可能有帮助:
1 | ls -l| grep -v '^d'| awk '{total = total + $5} END {print"Total" , total}' |
上面的命令将汇总所有离开目录大小的文件。
对于Win32 DOS,您可以:
C:>目录C:directoryyouwant
倒数第二行将告诉您文件占用了多少字节。
我知道这会读取所有文件和目录,但在某些情况下工作得更快。
用途:
1 | $ du -ckx <DIR> | grep total | awk '{print $1}' |
其中
"-c"提供使用命令的"grep total"部分提取的总计数据,并且使用awk命令提取以千字节为单位的计数。
这里唯一需要注意的是,如果您有一个子目录包含文本"total",它也会被吐出来。