
Estrutura de pastas:
etc (dir)
deploy (dir)
src (dir)
config (dir)
dist
├- config (dir)
├- index.js
O que eu gostaria de fazer é empacotar tudo, exceto a pasta de configuração raiz, e colocá-la em um arquivo tar deploy
. É importante que a dist/config
pasta esteja presente na saída. Começou com:
tar -czf deploy/deploy.gz --exclude=deploy --exclude="./config/" ./*
$ l ./deploy/deploy0/dist
index.js
router.js
test
Mas isso resulta em um arquivo dist/config
. A única maneira de chegar dist/config
lá é não tentar excluir nada chamado config:
tar -czf deploy/deploy.gz --exclude=deploy ./*
$ l ./deploy/deploy1/dist
config
index.js
router.js
test
OSX e CentOS (desenvolvimento e construção). O homem paraalcatrãome faz pensar que isso não é possível.
Eu resolvi isso apenas excluindo pastas que não quero, já que isso está em um ambiente de construção e os arquivos são descartáveis.
Responder1
Você poderia usar find
para criar seus argumentos - um pouco demorado:
find -mindepth 1 ! -wholename './config' ! -wholename './config/*'
mindepth 1
para excluir .
e duas wholename
exclusões para o próprio diretório, bem como seu conteúdo.
tar -xzf deploy/deploy.gz --exclude="deploy" \
$( find -mindepth 1 ! -wholename './config' ! -wholename './config/*' )
Responder2
Usar uma referência de ponto para o diretório atual como raiz do arquivo é uma âncora:
tar --exclude='./deploy' --exclude='./config' -cvf deploy/deploy.tar .
Mas se você usar um nome de diretório ou um curinga, o --anchored
sinalizador virá em seu socorro:
tar --anchored --exclude=deploy --exclude=config -cvf deploy/deploy.tar *
Responder3
Certifique-se de colocar --exclude
as opções antes dos argumentos de origem e destino
tar --exclude=deploy --exclude="./config" -cvz deploy/deploy.gz .
Responder4
Você pode usar ./
um marcador no início dos arquivos excluídos.
Eu uso assim:
tar --exclude='./build.tar.gz' --exclude='./config' -czf build.tar.gz .