文件夹结构:
etc (dir)
deploy (dir)
src (dir)
config (dir)
dist
├- config (dir)
├- index.js
我想做的是将除根配置文件夹之外的所有内容打包并将其放在 .tar 文件中deploy
。该dist/config
文件夹出现在输出中非常重要。开始于:
tar -czf deploy/deploy.gz --exclude=deploy --exclude="./config/" ./*
$ l ./deploy/deploy0/dist
index.js
router.js
test
但这会导致缺失dist/config
。我能过来的唯一方法dist/config
是如果我不尝试排除任何名为 config 的内容:
tar -czf deploy/deploy.gz --exclude=deploy ./*
$ l ./deploy/deploy1/dist
config
index.js
router.js
test
OSX 和 CentOS(开发和构建)。那个男人为了柏油让我觉得这是不可能的。
我通过删除不需要的文件夹来解决这个问题,因为这是在构建环境中并且文件是一次性的。
答案1
你可以用来find
创建你的论点 - 虽然有点长:
find -mindepth 1 ! -wholename './config' ! -wholename './config/*'
mindepth 1
排除.
,以及wholename
目录本身及其内容的两个排除。
tar -xzf deploy/deploy.gz --exclude="deploy" \
$( find -mindepth 1 ! -wholename './config' ! -wholename './config/*' )
答案2
使用对当前目录的点引用作为存档根是一个锚点:
tar --exclude='./deploy' --exclude='./config' -cvf deploy/deploy.tar .
但如果您使用目录名或通配符,那么该--anchored
标志将提供帮助:
tar --anchored --exclude=deploy --exclude=config -cvf deploy/deploy.tar *
答案3
确保将--exclude
选项放在源参数、目标参数之前
tar --exclude=deploy --exclude="./config" -cvz deploy/deploy.gz .
答案4
您可以./
在排除的文件的开头使用标记。
我这样使用它:
tar --exclude='./build.tar.gz' --exclude='./config' -czf build.tar.gz .