gzipとxzで「zip」の-R機能をどのようにエミュレートできますか?

gzipとxzで「zip」の-R機能をどのようにエミュレートできますか?

"zip"プログラムには、ユーザーがディレクトリツリー内の特定の名前のすべてのファイルを圧縮できるようにする-R機能があります。zip -rv/s zip -R

たとえば、

zip -R bigfile "bigfile" 

以下をすべて圧縮します
。./bigfile
./a/bigfile
./a/b/bigfile
./a/b/c/bigfile
....

ただし、-R機能はgzipまたはxzにはないようです。私はこれを試して、マニュアルページも確認しました。

それでは、gzipとxzでこの動作をどのようにシミュレートしますか?

答え1

ユーティリティの組み合わせfindtar圧縮:

そしてgzip

find . -type f -name bigfile | tar cfz bigfile.tgz -T -

または次のようにxz

find . -type f -name bigfile | tar cfJ bigfile.txz -T -

find現在/作業ディレクトリ内のすべてのファイルを再帰的に検索し、bigfile結果のパス名を指定してtarタールボールを作成して圧縮します。

このコマンドは、質問で提供された例に適合します。で提供されているさまざまなモードには、zip -Rで提供されている対応するパラメータが必要ですfind

また、これが可能なすべてのファイル名に対して機能しないことに注意してください。 --nullオプションを考慮し、find -print0でtarを指定する必要があります。

また、tar「-T」オプションは、すべてのシステム(HP-UXなど)で使用できるわけではありません。

編集1

たとえば、zip、rar、または7-zipとは異なり、gzipとxzは複数のファイルを単一のファイルに圧縮できません。

gzipのマニュアルページを引用すると、次のようになります。

後で独立して抽出できるように、複数のメンバーを含む単一のアーカイブファイルを作成するには、tarやzipなどのアーカイブプログラムを使用します。 GNU tar は gzip を透過的に呼び出す -z オプションをサポートしています。 gzipはtarに代わるものではなく、補完するように設計されています。

バラより複数のファイルを1つのgzファイルに圧縮するには?そして複数のファイルを.xzアーカイブに圧縮するには?

編集2

OPの目標が検索基準を満たすすべてのファイルに対してgzipファイルを生成することである場合は、次のコマンドを実行する必要があります。

find . -type f -name bigfile | gzip > bigfile.gz

xzファイルの場合:

find . -type f -name bigfile | xz > bigfile.xz

検索基準を満たす各ファイルに対して同じディレクトリに圧縮ファイルを作成し、元のファイルを「未変更」のままにします。

編集3

提案通り@クサラナンダbash初めて行う場合:

shopt -s globstar 

次に、次のコマンドを実行します。

tar -c -zf bigfile.tgz ./**/bigfile

検索基準に一致するサブディレクトリ内の複数のファイルを使用してアーカイブファイルが作成されます。

検索基準を満たすサブディレクトリ内のすべてのファイルに対して圧縮ファイルを生成することが目標である場合は、コマンドを実行してからshopt次のように実行します。

gzip ./**/bigfile

関連情報