สร้างไฟล์เก็บถาวรด้วยคำสั่ง“ gzip”


12

ฉันต้องสร้างไฟล์เก็บถาวรด้วยคำสั่ง gzip (ไม่ใช่ tar - มันจำเป็น) และไฟล์เก็บถาวรควรมีไฟล์จากไดเรกทอรีอื่น - ตัวอย่างเช่น / etc ฉันพยายามใช้คำสั่ง

gzip myetc.gz /etc

แต่มันไม่ทำงาน


3
gzipzipไม่ใช่ เป็นเครื่องมือต่าง ๆ ที่ทำงานแตกต่างกัน
roaima

3
gzipเป็นเพียงสตรีมคอมเพรสเซอร์ ไม่ทราบเกี่ยวกับไฟล์หรือไดเรกทอรี

3
ทำไมคุณไม่ใช้ tar
marcelm

หากคุณไม่มี tar คุณมี cpio หรือไม่
Rup

2
คุณบอกว่าคุณต้องการสร้างที่เก็บถาวร แต่คุณไม่สามารถใช้ tar คุณรู้ว่าส่วนหนึ่งของคำว่า "tar" นั้นมาจาก "ARchive" ฉันหมายความว่านั่นคือ raison d'etre ใครหรือสิ่งที่ต้องการแยก "tar" ออกจากกระบวนการสร้างที่เก็บถาวร โดยทั่วไปคุณจะถามวิธีขับสกรูด้วยค้อน (ไม่ใช่ไขควง - มันจำเป็น)
Mike S

คำตอบ:


6

Gzip ทำงานได้กับไฟล์เดียวหรือสตรีม - ข้อมูลที่ส่งไปยัง gzip ดังนั้นก่อนอื่นคุณต้องสร้างไฟล์เดียวเช่น tar และจากนั้นคุณสามารถ gzip นั้น ตัวเลือกอื่นคือการ gzip แต่ละไฟล์ทั้งหมดแล้วนำไปไว้ในไฟล์เดียว

โซลูชันทั้งสองนี้โง่และไม่ควรใช้ คุณควรใช้ tar พร้อมตัวเลือกการบีบอัดในตัวและทำทั้งหมดในคำสั่งเดียว


1
ทำไมวิธีแรกควรโง่? นี่เป็นวิธีปกติในการผลิต.tar.gz...
rexkogitans

งี่เง่าน่าจะไม่ใช่คำที่เหมาะสม แต่แทนที่จะใช้ gzip ถ้าคุณสามารถใช้ tar กับตัวเลือก c มันง่ายกว่าและฉันไม่เชื่อว่า piping tar ไปยัง gzip มีข้อได้เปรียบ
SPRBRN

Gzip สามารถทำงานได้หลายไฟล์พร้อมตัวเลือก -r แต่จะสร้าง. gz ใหม่สำหรับแต่ละไฟล์ในโฟลเดอร์
Luciano Andress Martini

1
@rexkogitans - มันโง่ในแบบเดียวกับที่cat filename | grep blahโง่ มันยังน้อยกว่าความเหมาะสมเพราะมันจะใช้พื้นที่ระหว่างกาลขนาดใหญ่ ฉันไม่รู้ว่าฉันจะเรียกมันว่าโง่เท่าที่ไม่น่าเชื่อถือ Suboptimal และโดยทั่วไปแล้วก็น่าเกลียด งี่เง่าก็ทำงานเช่นกัน
Mike S

โอ้ตอนนี้ฉันเห็นสิ่งที่โง่ ไม่มี `tar -czf` fork()เป็นวิธีที่จะเป็นไปตามที่มันไม่ได้เกี่ยวข้องกับการที่ไร้ประโยชน์
rexkogitans

13

gzipทำงานกับไฟล์ได้ไม่ใช่ไดเรกทอรี ดังนั้นเพื่อสร้างการเก็บถาวรของไดเรกทอรีที่คุณต้องใช้tar(ซึ่งจะสร้าง tarball เดียวจากหลายไฟล์):

tar cvf myetc.tar /etc

หรือสำหรับไฟล์เก็บถาวร gzipped:

tar cvzf myetc.tar.gz /etc

2
หากมีระบบ "โบราณ" ที่ไม่มีตัวเลือก "-z" พวกเขาสามารถทำได้: cd / ; tar cf - ./etc | gzip -c - > myetc.tar.gz (หากคุณสงสัยว่าทำไมฉันถึง tar "./etc" แทนที่จะเป็น "/ etc" เป็นเพราะในระบบเก่าเหล่านั้นเมื่อใช้ tar xvf มันจะส่งออกไปยัง / etc และเขียนทับมัน ... [หรือคุณต้องใช้ "pax" ในกรณีนั้น]) คำสั่งผกผันคือการแยกที่เก็บถาวรภายใต้ "/ ที่ไหนสักแห่ง": cd /somewhere ; gzip -dc < /the/location/of/myetc.tar.gz | tar xvf -
Olivier Dulac

1

หากคุณไม่มี tar จริง ๆ คุณสามารถใช้ gzip เพื่อสร้างข้อมูลสำรองของไดเรกทอรีโดยใช้ตัวเลือก (-r - เรียกซ้ำ) แต่อาจไม่ใช่สิ่งที่คุณต้องการ ...

ก่อนอื่นคุณจะต้องคัดลอกไดเรกทอรีของคุณไปยังชื่ออื่นหากคุณต้องการให้ไดเรกทอรีเดิมไม่สามารถแตะต้องได้

#cp -a directory my_gzip_alone_backup

ประการที่สองคุณจะบีบอัดไฟล์ทั้งหมดในไดเรกทอรีซ้ำ (-r)

#gzip -r my_gzip_alone_backup

ทีนี้มาดูใน my-gzip-alone-backup คุณจะไม่มีไฟล์เดียว myfile.gz ตามที่คุณคาดหวัง แต่ไฟล์ gziped จำนวนมากจะถูกเรียกซ้ำ แต่มันไม่ดีที่จะทำเช่นนั้นกับ symlink ...

เพื่อคลายการบีบอัดไดเรกทอรีสามารถใช้ตรรกะเดียวกันกับ gunzip

อีกวิธีหนึ่งคือการแปลงไดเรกทอรีเป็นไฟล์เดียวถ้าคุณไม่มี tar ทำเช่นนั้น แต่มี dd util เช่นที่แสดงในโพสต์นี้: /ubuntu/626634/converting-a แฟ้ม: เพื่อไดเรกทอรี

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