UNIXでフォルダを圧縮しようとしています。gzipコマンドを使用して圧縮できますか?
コメント
回答
いいえ。
zip
とは異なり、gzip
は圧縮アルゴリズムとしてのみ機能します 。
テープドライブの時代にさかのぼるさまざまな理由により、Unixはtar
という名前のプログラムを使用してデータをアーカイブし、圧縮プログラムで圧縮できます。 gzip
、bzip2
、7zip
など
でディレクトリを「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/ &
gzip -r myfolder
を使用できます。gunzip -r myfolder
。詳細については、man gzip
tar
を使用してください。圧縮のオプションをサポートしています。 。gzip
は、tar
を補完するものとして設計されており、代替としてではありません。comment
それは彼の質問に対する答えではなかったので。1
および2
フォルダーplayground
。gzip -r ./playground
は1.gz
と2.gz
を提供します(これ以上1
および2
ファイル)フォルダplayground
の下にあり、すべてが含まれているzipファイルではありません。