今天构建一个项目后,发现一些 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
- ...
我也不知道说清楚了没有。。。