UNIXでフォルダを圧縮しようとしています。gzipコマンドを使用して圧縮できますか?

コメント

  • ファイルを再帰的にgzip圧縮するgzip -r myfolderを使用できます。gunzip -r myfolder。詳細については、man gzip
  • tarを使用してください。圧縮のオプションをサポートしています。 。gzipは、tarを補完するものとして設計されており、代替としてではありません。
  • @ val0x00ff 'の提案はほぼ間違いなくあなたが達成したいものではありません。
  • @Shadur that '私がそれを投稿した理由commentそれは彼の質問に対する答えではなかったので。
  • @Shadurの意味を明らかにするため。与えられたファイル1および2フォルダーplaygroundgzip -r ./playground1.gz2.gzを提供します(これ以上1および2ファイル)フォルダplaygroundの下にあり、すべてが含まれているzipファイルではありません。

回答

いいえ。

zipとは異なり、gzipは圧縮アルゴリズムとしてのみ機能します

テープドライブの時代にさかのぼるさまざまな理由により、Unixはtarという名前のプログラムを使用してデータをアーカイブし、圧縮プログラムで圧縮できます。 gzipbzip27zipなど

でディレクトリを「zip」するには、正しいコマンドは次のようになります

tar -zcvf archive.tar.gz directory/ 

これにより、tar

p>

  • z (gzip)アルゴリズムを使用して圧縮します

  • c (作成) tarはデフォルトで再帰的です)

  • v (逐語的に)リスト(/ dev / stderr上)したがって、「パイプされたコマンドには影響しません)アーカイブに追加するすべてのファイル。

  • 出力をとして保存します。 f (ファイル) archive.tar.gz

tarコマンドは、純粋にユーザーの便宜のためにgzipサポートを(-zフラグを介して)提供します。 gzipコマンド/ libは完全に分離されています。上記のコマンドは、実質的には

tar -cv directory | gzip > archive.tar.gz 

アーカイブを解凍して、使用する現在のディレクトリに解凍するのと同じです

tar -zxvf archive.tar.gz 

そのコマンドは実質的に同じです

gunzip < archive.tar.gz | tar -xv 

tarには多くの、他にも多くのオプションと用途があります。いつかそのマンページを読むことを心からお勧めします。

コメント

  • さらに明確にするために、これは。結果のアーカイブは、tar -zxvfまたはzcat file.tar.gz | tar -xvで抽出できます。 tarはgzipから完全に独立しているため、tarコマンドには便宜上gzipのサポートが含まれているだけです。
  • 私はかなり長い間。注意すべき点が1つあります。Windows(7-zipを指定)を使用して*.tar.gzファイルを解凍する場合、2ラウンドかかります。 1つは*.tar.gzファイルを*.tarファイルに解凍し、次はそのtarファイルを元のコンテンツに解凍します。特に大きなファイル(ログなど)の場合、解凍の合計時間が長くなります。
  • アーカイブの名前は、マシン全体に影響しますか? zipするために最初に使用されたアルゴリズム(したがって.gz)を人々に知らせるのは良いことですが、それ以外は、アーカイブにどのように名前を付けるかは実際には重要ですか?
  • @hello_there_andyほとんどのUNIXとは異なりますが、Windows(およびLinuxのスマートタブ補完)は、ファイル拡張子に基づいて仮定を行います。
  • @vadimkotovこれはあなたが' re探しているもの: superuser.com/questions/168749/ …

回答

gzipコマンドは、-rスイッチ。むしろ、そのディレクトリ構造を調べて、見つかった各ファイルを個別のファイルに圧縮します。

$ tree dir1/ dir1/ |-- dir11 | |-- file11 | |-- file12 | `-- file13 |-- file1 |-- file2 `-- file3 

ここで

コマンド

$ gzip -r dir1 

after

$ tree dir1/ dir1/ |-- dir11 | |-- file11.gz | |-- file12.gz | `-- file13.gz |-- file1.gz |-- file2.gz `-- file3.gz 

ディレクトリ構造を圧縮したい場合は、tarコマンドを使用して、結果を圧縮することをお勧めします。 .tarファイル。

$ tar zcvf dir1.tar.gz dir1/ 

$ tar zcvf dir1.tar.gz dir1/ dir1/ dir1/file1 dir1/file2 dir1/dir11/ dir1/dir11/file11.gz dir1/dir11/file12.gz dir1/dir11/file13.gz dir1/file3 

次の単一ファイルになります:

$ ls -l | grep tar -rw-rw-r-- 1 saml saml 271 Oct 1 08:07 dir1.tar.gz 

内容を確認できます:

$ tar ztvf dir1.tar.gz drwxrwxr-x saml/saml 0 2013-10-01 08:05 dir1/ -rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file1 -rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file2 drwxrwxr-x saml/saml 0 2013-10-01 08:04 dir1/dir11/ -rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file11.gz -rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file12.gz -rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file13.gz -rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file3 

回答

「[Linuxで] gzipを使用してフォルダー全体を圧縮できますか?」という質問への回答。 gzipの代わりにzipプログラムを次の構文で使用できるということです:

zip -r <zip file name> <folder to zip> 

コメント

  • @JeffSchaller:これは答えです。それはひどく間違っているものですが(私は信じています)、それは明らかに答えです。
  • @ize:私は'あなたが投稿したコマンドがそうではないと確信しています。実際、gzipを使用してください。
  • 質問のようにzipを使用するためのポイント、おそらく作者はそれが正確に実行できることを知りたがっていたでしょう'彼が窓で行っていたのと同じこと。ほとんどの人が'ここまで考えたくないのは悲しいことです。
  • 質問で「gzipを使用する」と指定されている場合は注意が必要です。
  • '方法(gzipを使用)よりも製品(zipファイル)の方が重要だと思うので、この回答に賛成です。

回答

次の2つのコマンドをスクリプト化しました:

gzipdir

#!/bin/bash if [[ -d $1 ]]; then cd "$1" cd .. base=$(basename "$1") tar -zcvf "$base.tgz" "$base" if [[ $? == 0 && -f "$base.tgz" ]]; then rm -rf "$base" fi else echo "Usage: $0 DIRECTORY"; fi 

ungzipdir

#!/bin/bash if [[ -f $1 ]]; then base=${1%%.*} file=$(basename "$1"); dir=$(basename "$base"); if [[ ! -d $base ]]; then mkdir "$base" cd "$base" cd .. tar -xvf "$file" if [[ $? == 0 && -d "$dir" ]]; then rm -f "$file" fi else echo "Directory $base already exists. Nothing done." fi else echo "Usage: $0 file.tgz"; fi 

(!!!)使用前にテストしてください(「rm-f」があるため、一般的でない方法で使用すると重要なデータが削除される可能性があります)。

使用方法:

cd /home/; gzipdir MyDirectoryまたはgzipdir /home/MyDirectory

成功すると/home/MyDirectory.tgzを作成し、MyDirectoryを削除します(!!!)。

ungzipdir /home/MyDirectory.tgz

成功すると/ home / MyDirectoryを作成し、/ home /MyDirectory.tgzを削除します。

コメント

  • ディレクトリ内のすべてのファイルを圧縮するには:find ./* -maxdepth 0 -type d -exec gzipdir {} \;(findコマンドに注意し、

最初に、'が'をキャプチャしていないことを確認します。/'これはPARENTディレクトリを圧縮し、ホームディレクトリ全体を壊す可能性があります)

回答

pigz GZipの並列実装

tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz の使用をお勧めします

コメント

  • 私もよく使用しますが(pixzも)、パイプと出力リダイレクトが機能する場合は機能しますか?

回答

linuxtarが-zオプションをサポートしていない場合次を使用できます。

tar -cvf - dir | gzip > dir.tar.gz 

回答

完全を期すために、 bacでファイルをtarしたいkground、@ Shadurの回答を使用して、最後に&を追加します:

tar -zcvf archive.tar.gz directory/ &