ルート外のディレクトリだけを除いて、ツリー内のより深い場所にある同じ名前のディレクトリを除外するように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/*' )

おすすめ記事