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

如何通过bash查找含指定文件的目录并在对应目录执行命令

解决方案

方法1:使用-execdir(推荐,GNU find 适用)

该参数是GNU find专门为这类场景设计的,会自动切换到匹配文件所在的目录后再执行指定命令,写法最简单:

find . -name "thisfile" -execdir ls \;
  • 如果你要执行其他命令,直接替换ls为你需要的命令即可,比如要统计目录下文件数量就改成ls -l | wc -l
  • 结尾的\;是find命令-exec/-execdir参数的固定结束标记,不能省略

方法2:POSIX 兼容写法(适配所有类Unix系统)

如果你的系统没有GNU find(比如部分BSD系统、旧版Unix),可以通过调用子shell处理路径切换:

find . -name "thisfile" -exec sh -c 'cd "$(dirname "$1")" && ls' _ {} \;
  • 这里的{}是find的占位符,会被替换为找到的thisfile的完整路径
  • 子shell脚本里的$1对应传入的文件路径,dirname "$1"提取出文件所在的目录
  • 开头的_是用来填充子shell的$0位,属于可省略但更规范的写法

常见错误说明

你之前尝试的写法不生效主要是两个原因:

  • 直接在-exec参数里写&&连接命令会被当前shell截断,不会作为find要执行的命令的一部分
  • 普通的-exec是在你执行find命令的当前目录运行命令,不会自动切换到匹配文件所在目录,单独执行cd也只会对该次执行的子进程生效,不会影响后续命令执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 23:06:07