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

Bash中如何用find对目标文件同时执行两个命令

问题

需要在Bash中递归对特定文件执行两个命令,要求先输出文件名,再输出对应文件的元数据,依次处理每个文件。
原本的两个独立命令分别是:

  • 打印文件名:find . -wholename '*word/test.wsp' -exec echo {} \;
  • 打印元数据:find . -wholename '*word/test.wsp' -exec whisper-info {} \;

但第二个命令不输出文件名,无法对应元数据所属文件。尝试过多种命令组合均失败,包括:

  • find . -wholename '*word/test.wsp' -exec echo {} && whisper-info {} \;
  • find . -wholename '*word/test.wsp' -exec echo && whisper-info {} \;
  • find . -wholename '*word/test.wsp' -exec echo {} && -exec whisper-info {} \;
  • find . -wholename '*word/test.wsp' -exec echo {} \; && whisper-info {} \;
  • find . -wholename '*word/test.wsp' -exec echo {} \; && -exec whisper-info {} \;
解决办法

方法1:用Shell包裹多命令(推荐)

通过find的-exec调用子Shell,将两个命令绑定为一组,确保针对同一个文件执行:

find . -wholename '*word/test.wsp' -exec sh -c 'echo "$1"; whisper-info "$1"' sh {} \;

说明:

  • sh -c '...' 启动子Shell执行引号内的命令序列
  • "$1" 代表find传递的当前文件名(即{}),双引号包裹可避免文件名含空格时出错
  • 末尾的sh是给子Shell的$0赋值,避免脚本出现异常行为

方法2:多次使用-exec参数

如果不想用子Shell,也可以连续调用两次-exec,find会对每个匹配文件依次执行两个命令:

find . -wholename '*word/test.wsp' -exec echo {} \; -exec whisper-info {} \;

之前组合失败的原因

你尝试的命令错误在于:

  • && 会被当前Shell解析为find命令执行完成后再执行后续命令,而非-exec的一部分,导致whisper-info无法获取当前文件路径
  • 多次-exec的写法不符合语法,正确格式是每个-exec独立,无需用&&连接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:20:21