web-dev-qa-db-ja.com

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

パイプすることが可能かどうか誰かに教えてもらえますか?これは、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
32
regan

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

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 &&上記のコマンドの前にABと交換します。

Tarとgzipの例:

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

45
speakr

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
7
Bob Vale

cpを使用して別の名前/場所でコピーを作成する場合は、完成した.gzipファイルを作成するときに必要な完全/最終パス名を含めるだけです。

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