
폴더 구조:
etc (dir)
deploy (dir)
src (dir)
config (dir)
dist
├- config (dir)
├- index.js
내가 하고 싶은 것은 루트 구성 폴더를 제외한 모든 것을 압축하여 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 .