关于linux:计算shell中文件的大小

Calculate size of files in shell

我正试图用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。


使用zsh,您可以使用扩展的globbing执行以下操作:

DU-C**/*.撤消


1
find -name *.undo -print0 | du -hc --files0-from=-


1
du -c *pattern*

这将在输出的最后一行打印合计。


我也一直在关注这个问题(仅仅一年之后…)-只是找到了这个页面。

我发现(对我)有用的东西是:

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

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

我必须将粘贴命令归功于Radoulov-参见本页:shell命令对整数求和,每行一个?

只需添加—以防文件夹与搜索词匹配—在find命令中使用-type f也是一个好主意。


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

如果没有太多的文件(其中"太多"将是一个非常大的数字,可能是以千为单位),那么应该给出文件中实际的字节总数。或者,如果你只想知道电话号码,

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


python是大多数Linux发行版的一部分。

1
2
3
4
5
6
7
8
9
10
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

很长,但非常清晰,可扩展性很强。


1
find -name '*.undo' -print0 | du -hc --files0-from=- | tail -n 1

从格德姆布和斯特拉格的贡献中总结出来。使用du -cb应该显示字节。


我使用这样的du命令只获取数字:

1
du file_list | awk '{s+=$1} END {print s}'

我认为带有xargs的版本可以被修改(简化)LS-1*.Undo xargs wc


du-c awk'./line=$0 end打印$1


Perl一个班轮:

1
find . -name"*.undo" -ls | perl -lane '$t += $F[6]; END{print $t}'

@F自动拆分数组从索引$F[0]开始,awk字段从$1开始,因此使用$F[6]代替awk的$7


或者,您可以这样做:

1
2
3
4
5
6
7
8
9
10
11
dir=$1

for file in $dir/* ; do

 length_file=`stat -c %s $file`
 echo"File $file has length $length_file"
 length_total=`expr $length_total + $length_file`

done

echo"Total length: $length_total ."

其中stat显示文件或文件系统状态。参数-c表示使用指定的格式而不是默认格式,格式序列$s允许显示字节的总大小。

1
expr

只计算表达式。


这个简单的怎么样。

1
find ./ -name *.undo | xargs wc

检查du(磁盘使用)命令。