
資料夾結構:
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 .