You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux按子文件夹大小、文件修改时间删文件且排除指定目录实现方法

正确实现方案

核心误区说明

你之前用find的-size -5k判断目录大小的逻辑是错误的:该参数统计的是目录inode本身的元数据大小,不是目录下所有文件的总大小,所以第一步筛选就不符合需求。

单行快速实现

find ./main -maxdepth 1 -type d ! -name "second" -exec sh -c 'for d; do [ $(du -sk "$d" | cut -f1) -lt 5 ] && find "$d" -type f -mmin +5 -delete; done' sh {} +

各部分逻辑说明:

  • find ./main -maxdepth 1 -type d ! -name "second":仅遍历./main下的一级子目录,排除second目录
  • du -sk "$d" | cut -f1:统计目标目录的总大小,单位为KB
  • 匹配总大小小于5KB的目录后,执行第二层find删除该目录下修改时间超过5分钟的普通文件

易维护脚本实现

如果需要后续调整规则,推荐写成独立脚本:

#!/usr/bin/env bash
# 遍历main目录下的所有一级子目录
for dir in ./main/*/; do
    # 跳过second目录
    [[ "$dir" == *"/second/" ]] && continue
    # 统计目录总大小(单位KB,向上取整)
    dir_size=$(du -sk "$dir" | awk '{print $1}')
    # 总大小小于5KB时执行清理
    if (( dir_size < 5 )); then
        # 测试时可先替换-delete为-print,确认删除列表符合预期后再替换回-delete
        find "$dir" -type f -mmin +5 -delete
    fi
done

精度调整说明

如果需要精确到字节判断5KB(即5120字节),可以把du -sk替换为du -sb,同时将判断条件改为(( dir_size < 5124 ))即可。

内容的提问来源于stack exchange,提问作者Scholar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:54:03