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

Linux find命令如何同时捕获删除操作的成功信息与错误提示

原因说明

你现在用的-delete是find的内置动作,执行成功时默认不会向标准输出(stdout)打印任何内容,只有执行错误时才会向标准错误(stderr)输出报错信息,所以你只能捕获到失败日志。

实现方案

方案1:使用内置-delete+-print(推荐,性能更高)

find的动作是按从左到右的顺序执行,只有前一个动作执行成功才会触发后续动作。我们可以在-delete后加-print,只有删除成功的文件才会打印到stdout,错误信息依然输出到stderr,直接分别重定向即可:

find . -atime +30 -mtime +30 -type f -delete -print > successful_deletions.txt 2> failed_deletions.txt

注意动作顺序不能调换,否则会出现删除失败但文件被计入成功列表的问题。
该方案用find内置删除逻辑,不需要额外创建子进程,处理大量文件时效率远高于调用外部rm命令。

方案2:调用rm命令带verbose输出

如果你需要更详细的删除成功提示,可以替换-delete为带-v(verbose)参数的rm命令,rm会把成功删除的日志输出到stdout,错误输出到stderr:

find . -atime +30 -mtime +30 -type f -exec rm -v {} \; > successful_deletions.txt 2> failed_deletions.txt

注意事项

  • 正式执行删除前务必先运行不带删除动作的命令校验匹配结果,避免误删:
    find . -atime +30 -mtime +30 -type f
    
  • 若你的服务器分区挂载时开启了noatime参数,文件的访问时间不会更新,此时-atime匹配结果不符合预期,建议仅保留-mtime条件做匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:39:03