ルートから外れたディレクトリのみを除外し、ツリーのより深いところにある同じ名前のディレクトリは除外しないように tar に指示するにはどうすればよいでしょうか?

ルートから外れたディレクトリのみを除外し、ツリーのより深いところにある同じ名前のディレクトリは除外しないように tar に指示するにはどうすればよいでしょうか?

フォルダ構造:

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ディレクトリ自体とその内容の 2 つの除外があります。

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 .

関連情報