tarコマンドで-Cオプションを使用するときにグローバル/ワイルドカード文字をどのように使用しますか?

tarコマンドで-Cオプションを使用するときにグローバル/ワイルドカード文字をどのように使用しますか?

私のディレクトリ構造は次のとおりです。

/home/workspace/build/

/home/workspace/js/jai.1.js
/home/workspace/js/jai.2.js
/home/workspace/js/jai.3.js
/home/workspace/js/jai.4.js

欲しいアスファルトみんなJSプレフィックス付きのファイルジャイ/home/workspace/js/ディレクトリ間の内容/home/workspace/build/

生成されたtarファイルの名前は次のとおりです。アーカイブ

だから アーカイブ次のファイルを含める必要があります。

jai.1.js
jai.2.js
jai.3.js
jai.4.js

tarファイルをターゲットにコピーして圧縮するのではなく、コマンドを使用してこれを達成したいと思います。

編集する

destinationディレクトリで圧縮したいです。/home/workspace/build/

ベストアンサー1

(cd ../js && pax -w jai.*.js) | gzip > bundle.tar.gz

これを行います(コマンドがある場合に置き換えますpax -w)。要点は、サブシェルを使用して/の現在のディレクトリのみを変更することです。tar cf -tarpaxtar

一部のtar実装(tarこれは非常に移植性のないコマンドなのでPOSIXが導入されましたpax)には、-Cファイルコレクションのディレクトリを変更するオプションがありますが、ファイル出力のディレクトリは変更できません。また、通常は独自にz呼び出すgzipか、内部でgzip圧縮を実装するオプションもサポートしています。

しかし、次のものは:

tar czf bundle.tar.gz -C ../js jai.*.js

jai.*.js現在のディレクトリを変更せずにシェルによって拡張されるため、機能しません。これにより、zsh次のことができます。

tar czf bundle.tar.gz -C ../js ../js/jai.*.js(:t)

修飾子はどこで:t入手できますか?globによって生成されたファイルの(デフォルト名)。

を使用すると、pax次の操作も実行できます。

pax -'s|.*/||' -w -- ../js/jai.*.js | gzip > bundle.tar.gz

ただし、先行パスコンポーネントを削除する置換はシンボリックリンクターゲットにも適用されます(一部のtar実装ではこれらのファイルを翻訳する必要があるかどうかを指定するための同様のオプションがあります)、jail.*.jsこれらのファイルのいずれかがOutの場合は他の結果が属します。タイプする目次より多くのファイルを含めることができます。

libarchiveを使用すると、bsdtar次のこともできます。

bsdtar zcf bundle.tar.gz -C ../js --include=. --include='jai.*.js' .

GNUにはhasがtarないので、次のようにすることができます。--include--exclude

tar zcf bundle.tar.gz -C ../js --exclude='*[^s.]' \
                               --exclude='*?.' \
                               --exclude='*[^j]s' \
                               --exclude='*[^.]js' .

(こうするとアイテムが追加されますが.

そしてstar

star czf bundle.tar.gz -C ../js 'pat=jai.*.js' .

jai.foo/bar.js(ただし、ディレクトリに一致しないファイルは含まれますが含まれません)jail.*.js

star czf bundle.tar.gz -C ../js 'pat=jai.#[^/].js{%!/*}' .

(ここではEREと#<expr>同じです(何もなくORです))と同じことを行います。また、ディレクトリ全体の構造をクロールして、最上位のファイルのみを選択します。<expr>*{%!/*}(/.*)?%!(cd ../js && tar czf - jai.*.js) > bundle.tar.gz

最新バージョンの場合も使用できます-find。したがって、それに対応する場合は、(cd ...)不要なディレクトリにクロールしませんが、まだディレクトリ内のすべてのファイルを含めますjai.*.js

star czf bundle.tar.gz C=../js  -find . \
  \( \( -name '*.js' -o -path '*/*' -o -name . \) -o ! -prune \) ! -name .

可能性は高いですが、実際に欲しいものは次のとおりです。

star czf bundle.tar.gz C=../js \
  -find . -maxdepth 1 -name 'jai.*.js' -type f

それはただのアーカイブですjai.*.js 定期的なこれはファイルであり、最上位レベルでのみzsh次のことができます。

(cd ../js && pax -w -- jai.*.js(.)) | gzip > bundle.tar.gz

(.)になるグローバル予選限られた定期的な文書)。

おすすめ記事