Linux终端中如何删除MB级大小的文件?
删除MB级大小文件的正确命令
你的原命令du -sk * -h | grep M | rm -rf * 完全错误且极度危险:rm -rf *不会读取管道传来的内容,会直接删除当前目录下所有文件和文件夹,和前面的筛选逻辑毫无关系。
下面是两种安全有效的解决方案:
方法一:基于KB数值精准筛选(推荐)
避开单位解析的麻烦,直接用du输出的KB数值判断1MB-1023MB的文件/目录:
du -sk * | awk '$1 >= 1024 && $1 < 1048576 {print $2}' | xargs rm -rf
如果只想删除普通文件(不删除目录),用下面的命令:
du -sk * | awk '$1 >= 1024 && $1 < 1048576 {print $2}' | xargs -I {} sh -c '[ -f {} ] && rm -f {}'
方法二:基于du的人类可读输出筛选
如果一定要用grep M匹配单位,需用正则确保只匹配大小字段的M,避免误删文件名含M的文件:
du -h * | grep -E '^[0-9.]+\M\s' | awk '{print $2}' | xargs rm -rf
同样,仅删除普通文件的版本:
du -h * | grep -E '^[0-9.]+\M\s' | awk '{print $2}' | xargs -I {} sh -c '[ -f {} ] && rm -f {}'
核心逻辑解释
du -sk *:以KB为单位输出当前目录所有子项的大小和名称awk:根据设定的大小范围筛选目标项,提取名称xargs:将筛选出的名称批量传递给rm执行删除操作[ -f {} ]:额外检查目标是否为普通文件,避免误删目录
内容的提问来源于stack exchange,提问作者DAYALAN T
相关产品推荐
相关产品推荐

