ท่อ Howto: cp | tar | gzip โดยไม่ต้องสร้างไฟล์ตัวกลาง?


31

ใครสามารถบอกฉันว่าเป็นไปได้ที่จะไปป์ | สิ่งนี้โดยไม่ต้องสร้างไฟล์ที่มีอยู่จริงระหว่าง A ถึง B.tar.gz?

นี่คือสิ่งที่ฉันพยายามทำ:

  1. ไฟล์ A
  2. เปลี่ยนชื่อ A เป็น B
  3. น้ำมันดิน
  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เปลี่ยนชื่อเป็น
Karoly Horvath

3
โปรดอธิบายสาเหตุที่คุณต้องการคัดลอกAมาBก่อน
speakr

คำตอบ:


42

ตัวอย่างต่อไปนี้สามารถใช้เพื่อหลีกเลี่ยงการสร้างไฟล์ตัวกลาง:

tar กับ gzip:

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

gzip โดยไม่ต้อง tar:

gzip -9c A > B.gz

น้ำมันดินโดยไม่ต้อง gzip:

tar cf B.tar A

การเปลี่ยนชื่อ (การย้าย) Aเป็นBอันดับแรกไม่สมเหตุสมผลสำหรับฉัน หากมีจุดประสงค์ให้ใส่mv A B &&คำสั่งด้านบนแล้วแลกเปลี่ยนAกับสิ่งBนั้นก่อน

ตัวอย่างของ tar และ gzip:

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


1
สิ่งนี้ถูกต้องและควรทำเครื่องหมายเช่นนี้ คุณต้องรวม "-" หลัง "tar" สำหรับตัวเลือก piped มิฉะนั้นคุณจะได้รับ "tar: ขี้ขลาดปฏิเสธที่จะสร้างที่เก็บถาวรว่างเปล่า"
Adambean

6

ขึ้นอยู่กับรุ่น tar ของคุณ

หากคุณมีเวอร์ชันที่รองรับการแปลงสมาชิก (--transform หรือ --xform) คุณก็สามารถทำได้

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

the | gzip -9> B.tar.gz สามารถหลีกเลี่ยงได้หาก tar ของคุณรองรับตัวเลือก -z

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

หากรุ่น tar ของคุณไม่รองรับ - เปลี่ยนรูปแบบคุณจะต้องคัดลอกไฟล์ก่อนเช่น

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

อย่างไรก็ตามหากคุณบีบอัดไฟล์เพียงหนึ่งไฟล์ทำไมไม่ข้ามส่วน tar ทั้งหมดเข้าด้วยกันและทำ

cat A | gzip -9 > B.gz

ฉันใช้ cp อย่างที่คุณทำในตัวอย่างของคุณ แต่เปลี่ยนชื่อเป็น mv

0

หากคุณกำลังใช้cpทำสำเนาด้วยชื่อ / ที่ตั้งอื่นให้ใส่ชื่อพา ธ เต็ม / สุดท้ายที่คุณต้องการเมื่อสร้างไฟล์. gzip ที่สมบูรณ์

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

สิ่งนี้ไม่ทำงานสร้าง "tar: ขี้ขลาดปฏิเสธที่จะสร้างที่เก็บถาวรว่างเปล่า"
Adambean

@Adambean คุณอาจต้องการที่จะใช้tar -czf - some-folder > some-archive.tar.gz?
tsauerwein

1
@tsauerwein ใช่ดูคำตอบของฉันตอบด้านล่างจาก 14 เดือนที่ผ่านมา ...
Adambean
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.