当前位置:  开发笔记 > 编程语言 > 正文

计算shell中文件的大小

如何解决《计算shell中文件的大小》经验,为你挑选了7个好方法。

我正在尝试计算仅使用shell匹配文件名模式的所有文件(在目录树中)的总大小(以字节为单位).这是我到目前为止:

find -name*.undo -exec stat -c%s {} \; | awk'{total + = $ 1} END {print total}'

有更简单的方法吗?我觉得应该有一个简单的du或find开关为我做这个,但我找不到一个.

为了清楚起见,我希望在目录树下的任何位置匹配模式的文件总数

du -bs*.undo

将无法正常工作,因为它只匹配当前目录中的文件.



1> 小智..:

尝试:

find . -name "*.undo" -ls | awk '{total += $7} END {print total}'

在我的系统上,文件的大小是find -ls输出中的第七个字段.如果find … -ls输出不同,请调整.

在此版本中,使用现有目录信息(文件大小)和find的内置ls功能应该是高效的,避免进程创建或文件i/o.


如果有匹配"*.undo"glob的目录,我会在find命令中添加"-type f"以防止错误的总数.
这应该工作,但找到和awk的-ls选项对于此任务来说是过度的.
请注意,如果您需要匹配多个模式,则必须使用转义括号来匹配整个表达式,否则`-ls`将仅应用于最后一个模式.例如,如果要匹配所有jpeg和png文件(信任文件名),则使用`find.\(-iname"*.jpg"-o -iname"*.jpeg"-o -iname"*.png"\)-ls | awk'{total + = $ 7} END {print total}'`(`-iname`用于不区分大小写的搜索;另外,请注意表达式和转义括号之间的空格).

2> Chris AtLee..:

使用zsh,您可以使用扩展的globbing来执行:

du -c**/*.撤消


还有Fish和Bash 4.0!

3> user27478..:
find -name *.undo -print0 | du -hc --files0-from=-


我喜欢这个,因为它显示了"人类可读"的大小.@Tyler Collier只显示总使用尾部:`find -type f -name'*.undo'-print0 | du -hc --files0-from = - | 尾巴-n 1`

4> Cantillon..:
du -c *pattern*

这将在最后一行输出上打印总数.


那只会找到与当前目录中的模式匹配的文件 - 不是吗?

5> 小智..:

我一直在看这个问题(仅一年后......) - 只是刚刚找到这个页面.

我找到的东西(对我来说)有以下几点:

find /mnt/iso -name *.avi -printf "%s\n" | paste -sd+ - | bc

这将返回/ mnt/iso下所有子文件夹中所有.avi文件的总大小

我必须赞美radoulov的粘贴命令 - 请参阅此页: Shell命令求和整数,每行一个?

只是添加 - 以防文件夹与搜索词匹配 - 最好-type f在find命令中使用.



6> David Z..:
find -name '*.undo' -exec wc -c {} + | tail -n 1

如果你没有太多的文件("太多"将是一个非常大的数字,可能是数千),应该给出文件中的实际总字节数.或者如果你只是想单独得到数字,

find -name '*.undo' -exec wc -c {} + | tail -n 1 | cut -d' ' -f 1



7> S.Lott..:

Python是大多数Linux发行版的一部分.

import os
import fnmatch
size= 0
for path, dirs, files in os.walk( '.' ):
    for f in files:
        if fnmatch.fnmatch(f,'*.py'):
            fileSize= os.path.getsize( os.path.join(path,f) ) 
            print f, fileSize
            size += fileSize
print size

很长,但非常清晰,高度可扩展.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有