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

如何捕获find命令输出至日志文件以记录已删除文件

解决方案:捕获find命令删除的文件日志

你的问题核心在于rm -f默认是静默执行的——它不会主动输出任何被删除的文件信息,所以日志里只记录了日期和目录大小。下面给你几个实用的解决办法,任选其一即可:

方法1:用find的-print输出待删除文件

修改find命令,添加-print参数,让它在执行删除操作前,先把匹配到的文件路径输出到日志:

find ./ -name "System*_*.log" -type f -print -exec rm -f {} \; >>$LOG 2>&1

这样日志里会清晰列出所有被处理的文件路径,同时rm的错误信息(比如文件不存在、权限不足等)也会被捕获到日志中。

方法2:添加明确的“已删除”标记

如果想要日志可读性更强,可以在删除前先打印一条带标记的信息:

find ./ -name "System*_*.log" -type f -exec echo "Deleted: {}" \; -exec rm -f {} \; >>$LOG 2>&1

执行后日志里会显示类似Deleted: ./System_20240501.log的条目,一眼就能明确哪些文件被成功删除。

方法3:用rm的verbose模式(最简洁)

如果你的rm支持-v参数(Cygwin自带的GNU rm完全支持),直接用rm -fv让它主动输出删除详情:

find ./ -name "System*_*.log" -type f -exec rm -fv {} \; >>$LOG 2>&1

这种方式日志里会生成removed './System_20240502.log'的条目,不需要额外的打印命令,代码最简洁。

小优化:简化日志清空操作

原来脚本里的cat /dev/null>$LOG可以直接换成> $LOG,两者效果完全一致,代码更简洁:

#!/bin/bash
path="/cygdrive/d/splunk/finance"
LOG="/home/scripts/logCleanUp.log"
> $LOG  # 清空日志文件
date > $LOG
cd $path
# 替换为上面任意一个find命令即可
find ./ -name "System*_*.log" -type f -print -exec rm -f {} \; >>$LOG 2>&1
du -sh $path >>$LOG

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:25:31