目录内批量查找替换,我用 tree 替代 find。-阿里云开发者社区

开发者社区> 开发与运维> 正文

目录内批量查找替换,我用 tree 替代 find。

简介: 最近有需求,需要在编译好的前端文件里,查找替换特定字段。 通常都会想到用 find 找出文件再使用管道输出给 sed。但实际验证下来,包括去 StackOverFlow 上查找,解决方案都不理想。 主要的痛点是:find 对需要忽略的目录路径,处理很麻烦,效果还差异很大。

最近有需求,需要在编译好的前端文件里,查找替换特定字段。

通常都会想到用 find 找出文件再使用管道输出给 sed。但实际验证下来,包括去 StackOverFlow 上查找,解决方案都不理想。

主要的痛点是:find 对需要忽略的目录路径,处理很麻烦,效果还差异很大。例如这里说的 How to exclude a directory in find . command

折腾了大半天,勉强能用,我们有多个前端项目,要做这个适配很痛苦。

晚上在家灵光一闪:tree 这个命令,可以列出目录下所有文件和目录,何不试试?

周六溜回公司,试验了一把,完美。以下是最终的 ansible 代码部分。

- name: Find and replace specified strings
  shell: |
    tree --noreport --prune -iFf \
      -I 'node_modules|jspm_packages' \
      -P '*.css|*.js|*.html|*.htm' \
      build/{{ region_name }}/{{ prj_name }}/{{ prj_output_dir | default('target') }} \
      | grep -Ev '/$' \
      | tail -n +2 \
      | xargs -n1 sed -i -e 's/{{ item.s1 }}/{{ item.s2 }}/g'
  with_items:
     - s1: "work.aaa.com"
       s2: "{{ region_name }}-work.{{ region_domain }}"

用到的命令参数就不一一解释了。执行效率非常高。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章