1. 程式人生 > >tar命令的 --exclude引數的一點‘小坑’

tar命令的 --exclude引數的一點‘小坑’

今天構建一個專案後,發現一些 js、css 檔案不見了( xxx/xxx/dist/xxx.js ), 於是懷疑構建語句中 tar 打包語句的 --exclude=dist 引數有問題:

[email protected]:/data/logs$ tar zcvf dist/a.tar.gz *
a/
a/dist/
a/dist/aa.txt
a.txt
b/
b/dist
dist/
dist/dist.t
dist/a.tar.gz
dist.txt
[email protected]:/data/logs$ tar zcvf dist/a.tar.gz  --exclude=dist *   #這樣會排除掉所有名稱為 dist 的檔案和目錄
a/
a.txt
b/
dist.txt
[email protected]
:/data/logs$ tar zcvf dist/a.tar.gz --exclude=./dist ./* #這樣是排除 ./dist 這個目錄和子目錄 但是注意這裡需要打包的原始檔 必須用 ./* 表示 ./a/ ./a/dist/ ./a/dist/aa.txt ./a.txt ./b/ ./b/dist ./dist.txt

所以總結一下:

  • tar 的原始檔路徑的‘格式’ 繼承自其‘原始檔引數’
  • 而 --exclude 是根據原始檔列表中的路徑進行匹配,但要注意的是即便沒有‘*’萬用字元,也並不是從頭開始匹配,而是匹配任意一段不打破目錄名和檔名的路徑(md好繞)例如:

--exclude=a/dist

  • 這樣寫可以匹配:
  1. ./a/dist
  2. ./a/dist/*
  • 不能匹配
  1. aa/dist
  2. a/dist1
  3. ...

我也不知道說清楚了沒有。。。

--!