1つのコマンドでtar.xzを作成する


159

.tar.xz1つのコマンドで圧縮アーカイブを作成しようとしています。そのための具体的な構文は何ですか?

私は試しましたtar cf - file | xz file.tar.xzが、うまくいきません。

回答:


241

-J圧縮オプションを使用しますxz。そして、忘れないでくださいman tar:)

tar cfJ <archive.tar.xz> <files>

2015-08-10を編集:

あなたがに引数を渡している場合はtar ダッシュで(例:tar -cfとは反対にtar cf)、そして-fオプションは、最後に来なければなりません、それはファイル名を指定しているので、(おかげ@ABBそのアウトを指し示すために!)。その場合、コマンドは次のようになります。

tar -cJf <archive.tar.xz> <files>

5
追加v(コマンドスイッチにtar -cJvfファイルをアーカイブに追加されている番組冗長にします)。
スチュアートカルドール2016年

7
ダッシュでは順序が重要であることを考えると、順序が常に重要であると想定しf、ダッシュがなくても最後を付けるのがおそらく最善です。
mwfearnley

1
-e(--extended)のようなxzパラメータを渡すことは可能ですか?どうやらそれはデフォルトで拡張を使用しないでしょう。
chmike 2017

3
tarmacOSではサポートしているようです-Jが、その機能はmanページに記載されていません。ここで調べなければなりませんでした。彼らは--options... のセクションでXZについて言及していますが
cbarrick

1
@chmike XZ_OPT環境変数を使用します。例:XZ_OPT = "-9e -T0"。
Dzenly

50

スイッチ-Jは新しいシステムでのみ機能します。ユニバーサルコマンドは次のとおりです。

.tar.xzアーカイブを作成するには

tar cf - directory/ | xz -z - > directory.tar.xz

説明

  1. tar cf - directorydirectory /を読み取り、TAR形式に変換し始めます。この操作の出力は、標準出力に生成されます。

  2. | 標準出力を別のプログラムの入力にパイプします...

  3. ...たまたまxz -z -。XZは-z、標準入力(-)からアーカイブを圧縮()するように構成されています。

  4. あなたはからの出力をリダイレクトxzするtar.xzファイル。


16
-f に渡されたときに「ファイルから」という意味ではありません xzた。代わりに--force(詳細はxz(1)を参照してください)の略であり、必要でない限り使用しないのが最善です。
Eliah Kagan

@EliahKagan修正されました。ありがとう。
Wojciech Adam Koszek 2018年

2
マルチスレッド圧縮を使用するには、オプション-T0を使用できます。 tar cf - directory/ | xz -z -T0 - > directory.tar.xz
oidualc

別の利点は、コマンドラインでxzに圧縮レベルやその他のオプションを簡単に指定できることです。たとえば、圧縮を高速化したい場合、-1 -T0または-0 -T0オプションとして使用できるサイズをあまり気にしない場合、通常は同等またはより速い時間でgzipよりも小さいファイル-6が得られますが、デフォルトはかなり遅いですgzipより。
fgwaller

38

あなたがパイプモードが好きなら、これは最もクリーンな解決策です:

tar c some-dir | xz > some-dir.tar.xz

fファイルを処理するためにオプションを配置-し、ファイルが標準入力であることを指定するために使用する必要はありません。の-zオプションはxzデフォルトであるため、指定する必要もありません。

それはで動作gzipし、bzip2あまりにも:

tar c some-dir | gzip > some-dir.tar.gz

または

tar c some-dir | bzip2 > some-dir.tar.bz2

解凍も非常に簡単です:

xzcat tarball.tar.xz | tar x
bzcat tarball.tar.bz2 | tar x
zcat tarball.tar.gz | tar x

tarアーカイブしかない場合は、次を使用できますcat

cat archive.tar | tar x

ファイルのみをリストする必要がある場合は、 tar t


8

XZ圧縮オプションの使用

の圧縮オプションを使用する場合xz、またはtarMacOSで使用している場合は、おそらくtar -cJf構文ます。

によるとman xz、これを行う方法は次のとおりです。

tar cf - baz | xz -4e > baz.tar.xz

Wojciech Adam Koszekの形式は好きだったが、情報は好きではなかったので、

  1. c 指定したファイルの新しいアーカイブを作成します。
  2. fディレクトリから読み取ります(-cf!=なので、2番目に置くのが最適です-fc
  3. - 標準出力への出力
  4. | 出力を次のコマンドにパイプします
  5. xz -4e圧縮オプションxzを指定して呼び出し-4eます。(に等しい-4 --extreme
  6. > baz.tar.xz tarおよび圧縮されたファイルを baz.tar.xz

ここ-4eで、独自の圧縮オプションを使用します。元のファイルを頻繁に使用-kして--keep-9非常に重い圧縮を行います。-z手動でxzzipに設定しますが、特に指示がない限り、デフォルトでzipに設定されます。

解凍して解凍する

Rafael van Hornをエコーするには、解凍して解凍します(下記の注を参照)。

xz -dc baz.tar.xz | tar x

注:ラファエルの回答とは異なり、xz -dcではなくを使用してくださいcatxz。スクリプトでこれを使用している場合は、ドキュメントでこれをお勧めします。同様に、-dまたは--decompress代わりに使用する習慣をつけるのが最善unxzです。ただし、必要な場合は、コマンドラインからこれらのコマンドを使用することで問題ありません。


tar -cJfMacOSで構文を使用しない特別な理由はありますか?私が今それをやっていて、それが働いているようだったので、ちょうど好奇心が強い。
Lo-Tan

2
@ Lo-Tan tarがあれば動作します。私がそれを使用していたとき、私は適切なバージョンのtarを持っていなかったので、私にとってはうまくいきませんでした。また、xzの圧縮オプションを使用したかったのですが、tarを使用している場合はできません。また、パイプ構文は覚えやすいので、よく使用します。しかし、それぞれに
Connor

4

これを試して: tar -cf file.tar file-to-compress ; xz -z file.tar

注意:

  1. tar.gzとtar.xzは同じではありません。xzはより良い圧縮を提供します。
  2. | コマンドを同時に実行するため、パイプは使用しないでください。コマンドを次々に使用;または&実行します。

+1 RHEL 5.10ではJオプションが表示されませんが、これは機能します。RHEL6が必要だと思います。
ブライアン

2
出力をtarからxzにパイプするようにコマンドを調整しないのはなぜですか?
mwfearnley

@mwfearnley注意は、コマンドを順番に実行する必要があることを強調することだけだと思います。ファイル名は両方のコマンドで使用されるため、標準出力または標準入力からデータを書き込んだり読み取ったりすることはありません。ファイル名を指定せずにコマンドを使用する場合は、のように連鎖させることができますtar -c file-to-compress | xz -z > file.tar.xz
ジャックQ

を使用して&も、コマンドが次々に起動されることはありません。代わりに、最初のプロセスをバックグラウンドプロセスとして起動します。
ルイスラヴェール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.