应先精准筛选再安全执行:用-type f限定文件类型,结合-mtime和-size按修改时间和大小双重过滤,删除前用-ls预览,再用-delete或-exec rm -v {} \;执行,并加-xdev避免跨分区扫描。

直接用 find 查找并删除过期的大文件,关键在“先精准筛选、再安全执行”。不能跳过类型和时间限制直接删,否则容易误删目录或新文件。
按修改时间 + 文件大小双重筛选
过期通常指“很久没改过”且“占空间大”,推荐组合 -mtime 和 -size:
-
find /var/log -type f -mtime +30 -size +10M:查找/var/log下超过30天未修改、且大于10MB的普通文件 -
-mtime +30表示“30天前(不含当天)”,即最后修改时间 ≤ 当前时间减30×24小时 -
-size +10M中的+表示“大于”,M指兆字节(MiB),注意不是 MB;也可用k(KB)、G(GiB)
务必加 -type f 防止误删目录
很多事故源于 -name "*.log" 或 -size 条件没限定类型,结果匹配到同名目录——-delete 会递归清空整个目录。
- ✅ 正确写法:
find /tmp -type f -name "*.tmp" -mtime +7 -delete - ❌ 危险写法:
find /tmp -name "*.tmp" -mtime +7 -delete(可能删掉/tmp/backup.tmp/这样的目录)
删除前先预览,确认无误再执行
别一上来就 -delete。养成两步习惯:
- 第一步查出要删的文件:
find /data -type f -mtime +90 -size +100M -ls(-ls显示详细信息,含大小、时间、路径) - 第二步确认无误后加
-delete,或用-exec rm -v {} \;(-v显示每条删除动作,便于回溯) - 如需更稳妥,可先移动到临时目录:
find /home -type f -size +500M -mtime +180 -exec mv {} /tmp/to_delete/ \;
排除挂载点避免跨分区扫描
如果搜索根目录 /,加上 -xdev 可防止进入 /proc、/sys、/mnt 等非主分区路径,既提速又避错:
find / -xdev -type f -mtime +180 -size +1G-
-xdev表示“不跨越文件系统”,只查当前挂载点内的文件


















