天天看點

目錄内批量查找替換,我用 tree 替代 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 }}"           

用到的指令參數就不一一解釋了。執行效率非常高。

繼續閱讀