zsh环境下如何批量对多子目录执行kubectl apply命令
方案1:全shell兼容通用方案
直接执行find命令即可,自动遍历所有符合要求的文件逐一执行操作,支持带空格的路径:find dir1 -type f -name "deployment.yml" -exec kubectl apply -f {} \;方案2:zsh原生极简循环方案
oh-my-zsh默认已适配通配符规则,直接执行单行循环即可:for deploy_file in dir1/*/deployment.yml; do kubectl apply -f "$deploy_file"; done
如果需要匹配dir1下任意层级子目录中的deployment.yml,可使用zsh的全局递归通配符:for deploy_file in dir1/**/deployment.yml; do kubectl apply -f "$deploy_file"; done方案3:管道xargs传参方案
适合习惯管道操作的场景,避免特殊字符导致的传参错误:find dir1 -name "deployment.yml" -print0 | xargs -0 -I {} kubectl apply -f {}
你此前执行的
kubectl apply -f dir1/*/deployment.yml失效,是因为kubectl的-f参数要求每个目标文件前都需要单独携带-f标识,不能将多个文件路径直接拼接在单个-f参数后;而大括号枚举子目录的写法需要手动罗列所有子目录名称,灵活性极低,子目录数量变化时需要对应修改命令,不推荐日常使用。
内容的提问来源于stack exchange,提问作者cclloyd

