如何统计根目录csv中以h/H开头的文件夹总大小?命令匹配错误排查
问题分析与解决方案
嘿,我来帮你捋清楚问题出在哪,以及怎么搞定你的两个需求~
首先,你之前的命令大概率犯了两个关键错误:
- 没限定只找文件夹:默认的文件查找命令(比如
find)会匹配所有类型的文件(普通文件、文件夹、链接等),如果你没加参数指定只找文件夹,就会把符合字符条件的文件也揪出来。 - 匹配规则错了:你用的是包含
h的匹配(比如*h*),而不是以H或h开头的匹配(应该是[Hh]*),这就导致结果里混进了名字中间带h的项目,而不是你要的开头就带的文件夹。
下面针对你的两个需求,给你具体的正确命令:
需求1:查找所有以指定字符开头的文件夹
假设你要找的是以H或h开头的文件夹,用find命令就可以搞定:
# 替换成你的根目录路径,比如/root/csv或者当前目录用. find /your/root/dir -type d -name "[Hh]*"
-type d:这是核心,告诉find只找文件夹(directory)[Hh]*:匹配所有以H或h开头的名称,*表示后面可以跟任意字符;如果是指定单个字符(比如只找X开头的),换成"X*"就行。
需求2:统计这些文件夹的大小总和
可以把上面找到的文件夹直接传给du(磁盘使用量统计命令),再用工具累加总和,这里给你两种常用方法:
方法1:用awk累加
find /your/root/dir -type d -name "[Hh]*" -exec du -s {} + | awk '{sum += $1} END {print "总大小:" sum " KB"}'
-exec du -s {} +:对每个找到的文件夹执行du -s,输出单个文件夹的总大小(默认单位KB)awk:把所有du输出的第一列(大小数值)累加,最后输出总和。
方法2:用du的--total参数更简单
如果你的du版本支持(大部分主流系统都支持),可以直接让du自己算总和:
find /your/root/dir -type d -name "[Hh]*" -print0 | du -sh --total --files0-from=- | tail -n1
-print0和--files0-from=-:避免文件夹名称里有空格导致的错误-sh:s表示单个项目总大小,h表示用易读的单位(比如MB/GB)--total:让du在最后输出所有项目的总和,tail -n1只取总和那一行。
这样就能精准完成你的两个需求啦~
内容的提问来源于stack exchange,提问作者barskyn
相关产品推荐
相关产品推荐

