如何从Linux命令行删除XYZ目录下占用空间最大的100个文件?
删除XYZ目录下占用空间最大的100个文件
核心命令(基础版)
直接运行以下命令即可批量删除目标文件:
du -a XYZ/ | sort -nr | head -n 100 | awk '{print $2}' | xargs rm -f
命令拆解
du -a XYZ/:遍历XYZ目录及其子目录,输出每个文件的磁盘占用量与完整路径,格式为「大小 路径」sort -nr:按数值对结果逆序排序,确保最大的文件排在最前面head -n 100:截取排序后的前100行,对应最大的100个文件awk '{print $2}':提取每行的第二列(即文件路径),过滤掉大小数值xargs rm -f:将提取到的路径批量传给rm命令,-f参数强制删除,避免交互确认
处理含特殊字符的文件名
如果目标文件包含空格、换行或引号等特殊字符,基础版命令可能失效,改用以下安全写法:
du -a0 XYZ/ | sort -z -nr | head -z -n 100 | awk -v RS='\0' '{print $2}' | xargs -0 rm -f
这里的-0/-z参数让所有命令用null字符分隔文件名,彻底避免特殊字符导致的错误。
安全预览建议
删除前强烈建议先预览要删除的文件,确认无误后再执行删除操作:
du -a XYZ/ | sort -nr | head -n 100 | awk '{print $2}'
更快的替代方案(用find)
如果XYZ目录下文件极多,du可能运行较慢,可改用find直接获取文件大小:
find XYZ/ -type f -printf '%s %p\n' | sort -nr | head -n 100 | awk '{print $2}' | xargs rm -f
find -type f仅查找普通文件(排除目录),%s输出文件字节数,%p输出完整路径,整体执行效率更高。
内容的提问来源于stack exchange,提问作者Alex334
相关产品推荐
相关产品推荐

