如何让du命令仅作用于文件而非目录?
解决du命令仅统计文件的问题
嘿,这个需求我太熟了!之前用du *的时候总是把目录也统计进去,折腾了好几个靠谱的办法,现在分享给你:
方法1:用find精准筛选(通用所有shell)
这是最稳妥的方案,不管你用bash、zsh还是其他shell都能生效:
# 只统计当前目录下的文件,不递归子目录 find . -maxdepth 1 -type f -exec du -sh {} + # 要递归统计所有子目录里的文件?去掉-maxdepth 1就行 find . -type f -exec du -sh {} +
-type f:直接告诉find只找普通文件,完全排除目录-maxdepth 1:限制查找范围在当前目录,避免递归子目录-exec du -sh {} +:把找到的文件批量传给du,-sh让输出是人类可读的大小格式
方法2:bash扩展glob(简洁到飞起)
如果你的bash开启了extglob(绝大多数系统默认开启),一行命令就能搞定:
# 统计当前目录下的所有非目录文件 du -sh !(*/) # 要是需要包含隐藏文件,先开个小开关 shopt -s dotglob du -sh !(*/)
!(*/)是bash的扩展匹配语法,专门匹配不是目录的条目——因为目录在glob匹配里会自动带/后缀,刚好被排除在外。
方法3:du+grep快速过滤(临时救急)
如果只是临时用一次,不想记复杂命令,用这个组合也能凑活:
du -ah | grep -v '/$'
-ah:-a让du显示所有文件和目录,-h让大小更易读grep -v '/$':把所有以/结尾的行(也就是目录的统计行)过滤掉
不过这个方法要注意:如果文件名里有特殊字符可能会出小问题,但日常使用完全够了。
内容的提问来源于stack exchange,提问作者M. Abra
相关产品推荐
相关产品推荐

