解壓縮只取第二層目錄以下的檔案與目錄

Angular/Vue 這類的前端框架,在執行 npm run build 建置以後,會產生 dist 的資料夾,裏面就是要佈署的檔案。一般會使用 tar czf dist.tar.gz dist 將該資料夾裡的檔案打包為 tarball。

使用 Ansible 佈署時,需要使用 unarchive 模組解壓縮,這時會直接解壓縮出 dist 目錄。

通常解法會有兩種,第一種是在打包時,先進入 dist 資料夾,再進行打包。

第二種方法就是本文要介紹的小技巧。

這個小技巧是 Google 找到的,網址在這邊:Extract without first directory

方法就是利用 unarchive 模組的 extra_opts 參數,因為 tarball 檔案,unarchive 模組會使用 tar 去解壓縮,tar 有個參數:--strip-components=NUMBER ,利用這個參數就可以移除掉前面 NUMBER 層的目錄。

範例如下

- name: Extract archive
  unarchive:
    src: file.tar.gz
    dest: /foo/bar
    extra_opts:
      - "--strip-components=1"

現在大家就知道可以透過 unarchive 模組的 extra_opts ,帶入解壓縮指令的參數來達到我們的目的了。