群晖NAS终端中如何正确列出小于指定大小的目录?
问题原因
find命令的-size参数作用在目录上时,统计的是目录自身的元数据大小(也就是存储目录条目、权限等信息占用的磁盘空间),不是目录及其所有子文件、子目录的总大小。哪怕目录里装了几个GB的文件,目录本身的大小可能也只有几KB,所以你用-size -5M会找出几乎所有目录,完全不符合预期。
正确的筛选命令
下面两种方法都能准确找出总大小小于5MB的目录:
方法1:用du直接统计筛选
du -sm /volume1/Music\ Library/ | awk '$1 < 5 {print $2}'
du -sm:-s只输出每个目录的总大小,-m按MB单位统计;awk '$1 < 5 {print $2}':筛选出第一列(大小数值)小于5的行,输出第二列(目录路径)。
如果要遍历所有层级的子目录,用这个命令:
du -sm /volume1/Music\ Library/*/ 2>/dev/null | awk '$1 < 5 {print $2}'
/*/匹配一级子目录,2>/dev/null忽略权限不足等错误信息。
方法2:结合find和du批量处理
适合需要更精确控制遍历范围的场景(比如排除特定名称的目录):
find /volume1/Music\ Library/ -type d ! -name ".*" -exec du -sm {} + | awk '$1 < 5 {print $2}'
! -name ".*":排除隐藏目录;-exec du -sm {} +:批量给find找到的每个目录调用du统计总大小。
内容的提问来源于stack exchange,提问作者DasKraut
相关产品推荐
相关产品推荐

