私のディレクトリ構造は次のとおりです。
/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 -
tar
pax
tar
一部の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
((.)
になるグローバル予選限られた定期的な文書)。
答え2
ここでは正規表現は必要ありません。次のように通常のシェルアスタリスクを使用できます。
tar cvzf /home/workspace/build/bundle.tar.gz /home/workspace/js/jai.*.js
ディレクトリ構造を維持したくない場合は、最も簡単な方法はcd /home/workspace/js/
次のとおりです。tar cvzf /home/workspace/build/bundle.tar.gz jai.*.js