今天構建一個項目後,發現一些 js、css 文件不見了( xxx/xxx/dist/xxx.js ), 於是懷疑構建語句中 tar 打包語句的 --exclude=dist 參數有問題:
root@9805b712cdeb:/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
root@9805b712cdeb:/data/logs$ tar zcvf dist/a.tar.gz --exclude=dist * #這樣會排除掉所有名稱爲 dist 的文件和目錄
a/
a.txt
b/
dist.txt
root@9805b712cdeb:/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
- ...
我也不知道說清楚了沒有。。。