ハウツーパイプ:cp | タール| 中間ファイルを作成せずにgzipしますか?


31

パイプすることが可能かどうか誰にも教えてもらえますか?これは、AとB.tar.gzの間のどこかに物理ファイルを作成する必要はありませんか?

これは私がやろうとしていることです:

  1. ファイルA
  2. AからBへの名前変更
  3. タールB.tar
  4. gzip -9 B.tar.gz

たとえば、次のとおりです。

cp A B | tar cvf - B | gzip -9 B.tar.gz
gzip  pipe  tar 

なぜパイプするのcp A Bですか?
Dor

1
名前の変更はmvです。
カロリーHorvath

3
コピーしたい理由を説明してくださいAB最初に。
スピーカー

回答:


42

次の例を使用して、中間ファイルの作成を回避できます。

gzipを使用したtar:

tar cf - A | gzip -9 > B.tar.gz

tarなしのgzip:

gzip -9c A > B.gz

gzipなしのtar:

tar cf B.tar A

最初に名前を変更(移動)ABても意味がありません。これが意図されている場合mv A B &&、上記のコマンドのいずれかを前に置き、そこで交換AするBだけです。

tarとgzipを使用した例:

mv A B && tar cf - B | gzip -9 > B.tar.gz


1
これは正しいため、そのようにマークする必要があります。パイプオプションの「tar」の後に「-」を含める必要があります。そうしないと、「tar:空のアーカイブの作成をCo病に拒否します」が表示されます。
アダムビーン

6

tarのバージョンに依存します

メンバー変換(--transformまたは--xform)をサポートするバージョンがある場合は、単に

tar -c --transform=s/A/B/ A | gzip -9 > B.tar.gz

| gzip -9> B.tar.gzは、tarが-zオプションをサポートしている場合は回避できます

tar -zcvf B.tar.gz --transform=s/A/B/ A

tarのバージョンが--transformをサポートしていない場合、最初にファイルをコピーするだけです。

 cp A B && tar -zcvf B.tar.gz B

ただし、1つのファイルのみを圧縮している場合は、tar部分を一緒にスキップしないでください。

cat A | gzip -9 > B.gz

あなたはあなたの例で行ったように私は、CPを使用しましたが、名前の変更は、MVである

0

あなたが使用している場合はcp別の名前/場所にコピーを作成し、その後、ちょうどあなたの完成.gzipファイルを作成するときに、あなたが望むフル/最後のパス名が含まれています。

tar -cvf existing.file | gzip -1 > ./newdirectory/newnamed.file.tgz

これは機能せず、「tar:空のアーカイブの作成をCo病に拒否」します。
アダムビーン

@Adambeanたぶんあなたは使いたいtar -czf - some-folder > some-archive.tar.gzですか?
tsauerwein

1
@tsauerwein、はい、14か月前からの以下の回答への返信を参照してください...
アダムビーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.