
Структура папок:
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 .