Howto pipe: cp | tar | gzip tanpa membuat file perantara?


29

Adakah yang bisa memberi tahu saya jika mungkin untuk pipa | ini tanpa harus membuat file fisik di mana saja antara A dan B.tar.gz?

Inilah yang saya coba lakukan:

  1. File A
  2. Ganti nama A ke B
  3. Tar B.tar
  4. gzip -9 B.tar.gz

Jadi misalnya:

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

mengapa kamu ingin pipa cp A B?
Dor

1
ganti nama adalah mv.
Karoly Horvath

3
Tolong jelaskan mengapa Anda ingin menyalin Ake Bpertama.
Bicara

Jawaban:


40

Contoh-contoh berikut dapat digunakan untuk menghindari membuat file perantara:

tar dengan gzip:

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

gzip tanpa tar:

gzip -9c A > B.gz

tar tanpa gzip:

tar cf B.tar A

Mengganti nama (pindah) Amenjadi yang Bpertama tidak masuk akal bagi saya. Jika ini dimaksudkan, maka cukup letakkan mv A B &&sebelum salah satu dari perintah di atas dan bertukar Adengan Bsana.

Contoh dengan tar dan gzip:

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


Ini benar dan harus ditandai seperti itu. Anda harus menyertakan "-" setelah "tar" untuk opsi yang disalurkan jika tidak Anda akan mendapatkan "tar: Cowardly menolak untuk membuat arsip kosong".
Adambean

6

Itu tergantung pada versi tar Anda

Jika Anda memiliki versi yang mendukung transformasi anggota (--transform atau --xform) maka Anda dapat melakukannya

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

itu | gzip -9> B.tar.gz dapat dihindari jika tar Anda mendukung opsi -z

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

Jika versi tar Anda tidak mendukung --transformasi maka Anda hanya perlu menyalin file mis

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

Namun jika Anda hanya mengompresi satu file, mengapa tidak melewatkan bagian tar secara bersamaan dan lakukan saja

cat A | gzip -9 > B.gz

Saya telah menggunakan cp seperti yang Anda lakukan dalam contoh Anda tetapi mengubah nama menjadi mv

0

Jika Anda menggunakan cpuntuk membuat salinan dengan nama / lokasi yang berbeda, maka cukup sertakan pathname lengkap / final yang Anda inginkan saat membuat file .gzip Anda yang sudah selesai:

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

Ini tidak berfungsi, menghasilkan "tar: Pengecut menolak untuk membuat arsip kosong".
Adambean

@ Adambean Mungkin Anda ingin menggunakan tar -czf - some-folder > some-archive.tar.gz?
tsauerwein

1
@tsauerwein, ya, lihat jawaban saya untuk jawaban di bawah ini dari 14 bulan yang lalu ...
Adambean
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.