我正在尝试计算仅使用shell匹配文件名模式的所有文件(在目录树中)的总大小(以字节为单位).这是我到目前为止:
find -name*.undo -exec stat -c%s {} \; | awk'{total + = $ 1} END {print total}'
有更简单的方法吗?我觉得应该有一个简单的du或find开关为我做这个,但我找不到一个.
为了清楚起见,我希望在目录树下的任何位置匹配模式的文件总数
du -bs*.undo
将无法正常工作,因为它只匹配当前目录中的文件.
尝试:
find . -name "*.undo" -ls | awk '{total += $7} END {print total}'
在我的系统上,文件的大小是find -ls
输出中的第七个字段.如果find … -ls
输出不同,请调整.
在此版本中,使用现有目录信息(文件大小)和find的内置ls功能应该是高效的,避免进程创建或文件i/o.
使用zsh,您可以使用扩展的globbing来执行:
du -c**/*.撤消
find -name *.undo -print0 | du -hc --files0-from=-
du -c *pattern*
这将在最后一行输出上打印总数.
我一直在看这个问题(仅一年后......) - 只是刚刚找到这个页面.
我找到的东西(对我来说)有以下几点:
find /mnt/iso -name *.avi -printf "%s\n" | paste -sd+ - | bc
这将返回/ mnt/iso下所有子文件夹中所有.avi文件的总大小
我必须赞美radoulov的粘贴命令 - 请参阅此页: Shell命令求和整数,每行一个?
只是添加 - 以防文件夹与搜索词匹配 - 最好-type f
在find命令中使用.
find -name '*.undo' -exec wc -c {} + | tail -n 1
如果你没有太多的文件("太多"将是一个非常大的数字,可能是数千),应该给出文件中的实际总字节数.或者如果你只是想单独得到数字,
find -name '*.undo' -exec wc -c {} + | tail -n 1 | cut -d' ' -f 1
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
很长,但非常清晰,高度可扩展.