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

如何在find命令的-exec执行逻辑中正常使用echo | tee功能?

问题原因
  • FILE变量未导出:你仅导出了echotee函数,但$FILE是当前shell的本地变量,find -exec启动的子shell无法读取该变量,导致tee -a ${FILE}执行时$FILE为空。tee接收到空的文件路径参数时只会输出到标准输出(终端),不会写入任何文件,这正是你遇到的现象。
  • sh环境不兼容Bash导出函数:多数Linux发行版默认/bin/sh是Dash而非Bash,Dash不支持Bash的export -f函数导出机制,即使变量导出正确,也可能出现找不到echotee函数的问题。
  • find参数顺序错误:find的动作按参数从左到右执行,你把-delete放在-exec前面,会先删除文件再执行日志打印,既不符合日志记录逻辑,也可能因文件/路径已被删除导致输出异常。
修复方案
  1. 导出FILE变量,同时优化函数的参数兼容性,避免文件名含空格时出错:
export FILE="/你的实际日志文件路径" # 替换为你实际的日志文件路径
function echotee() { echo "$1" | tee -a "${FILE}"; }
export -f echotee
  1. 调整find命令:将sh -c替换为bash -c保证Bash环境,调整-delete顺序到-exec之后,同时优化特殊文件名的兼容性:
find . -exec bash -c 'echotee "Deleting: $0"' {} \; -delete

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:09:02