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

如何对find找到的非spec类JS/TS文件替换路径前缀为./并生成import语句

解决zsh下生成指定import语句的路径替换问题

方法1:find + sed + xargs 组合实现

直接通过管道串联命令完成文件查找、路径替换和import语句生成,避免shell参数替换的解析问题:

find src/app -type f \( -name "*.js" -o -name "*.ts" \) ! -name "*.spec.js" | sed 's/^src\/app\//.\//' | xargs -I {} echo 'import "{}";'
  • find 部分:定位src/app下所有JS/TS文件,排除*.spec.js
  • sed 部分:将路径开头的src/app/替换为./
  • xargs 部分:把处理后的路径套入import模板输出

方法2:zsh原生循环处理

利用zsh的通配符遍历能力,直接在当前shell中处理,避免子shell解析冲突:

for file in src/app/**/*.{js,ts}(.N); do
  [[ $file == *.spec.js ]] && continue
  import_path=${file//src\/app\//./}
  echo "import \"$import_path\";"
done
  • src/app/**/*.{js,ts}(.N):递归匹配所有JS/TS文件,.N确保无匹配时不报错
  • 跳过*.spec.js文件后,用zsh的参数替换语法直接修改路径,生成import语句

修复原find -exec命令的报错

如果坚持用find -exec,需要确保参数替换在子shell中执行,避免zsh提前解析变量导致bad substitution:

find src/app -type f \( -name "*.js" -o -name "*.ts" \) ! -name "*.spec.js" -exec sh -c '
  for path do
    import_path=${path//src\/app\//./}
    echo "import \"$import_path\";"
  done
' sh {} +
  • 将处理逻辑放在单引号包裹的sh脚本块中,让变量替换在子shell内完成,避免被zsh提前解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:10:42