tar命令的 --exclude引數的一點‘小坑’
阿新 • • 發佈:2018-11-25
今天構建一個專案後,發現一些 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
- 這樣寫可以匹配:
- ./a/dist
- ./a/dist/*
- 不能匹配
- aa/dist
- a/dist1
- ...
我也不知道說清楚了沒有。。。