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

sumber
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

bicara
sumber
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
Bob Vale
sumber
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
Tamu
sumber
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