如何对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.jssed部分:将路径开头的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
相关产品推荐
相关产品推荐

