ฉันจะบีบอัดไฟล์ในสถานที่ได้อย่างไร


20

ฉันมีเครื่องที่มีการใช้งานฮาร์ดดิสก์ 90% ฉันต้องการบีบอัดไฟล์บันทึก 500+ ไฟล์ให้เป็นไฟล์ใหม่ที่เล็กกว่า อย่างไรก็ตามฮาร์ดดิสก์มีขนาดเล็กเกินไปที่จะเก็บไฟล์ต้นฉบับและไฟล์ที่บีบอัดไว้

ดังนั้นสิ่งที่ฉันต้องการคือการบีบอัดไฟล์บันทึกทั้งหมดเป็นไฟล์ใหม่ทีละไฟล์ลบต้นฉบับเมื่อถูกบีบอัด

ฉันจะทำสิ่งนั้นใน Linux ได้อย่างไร


คำตอบ:


18

gzipหรือbzip2จะบีบอัดไฟล์และลบไฟล์ที่ไม่ถูกบีบอัดออกโดยอัตโนมัติ

อย่างไรก็ตามโปรดทราบว่าในขณะที่กระบวนการบีบอัดไฟล์ทั้งสองจะมีอยู่

หากคุณต้องการบีบอัดไฟล์บันทึก (เช่น: ไฟล์ที่มีข้อความ) คุณอาจต้องการbzip2เนื่องจากมีอัตราส่วนที่ดีกว่าสำหรับไฟล์ข้อความ

bzip2 -9 myfile       # will produce myfile.bz2

การเปรียบเทียบและตัวอย่าง:

$ ls -l myfile
-rw-rw-r-- 1 apaul apaul 585999 29 april 10:09 myfile

$ bzip2 -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 115780 29 april 10:09 myfile.bz2

$ bunzip2 myfile.bz2

$ gzip -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 146234 29 april 10:09 myfile.gz

อัปเดตตามที่ @Jaoao บอกกับฉันในความคิดเห็นที่น่าสนใจxzดูเหมือนว่าจะมีอัตราส่วนที่ดีที่สุดในไฟล์ธรรมดาที่มีตัวเลือกเริ่มต้น:

$ xz -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 109384 29 april 10:09 myfile.xz

สำหรับข้อมูลเพิ่มเติมนี่เป็นเกณฑ์มาตรฐานที่น่าสนใจสำหรับเครื่องมือต่าง ๆ : http://binfalse.de/2011/04/04/comparison-of-compression/

สำหรับตัวอย่างด้านบนฉันใช้-9เพื่ออัตราส่วนการบีบอัดที่ดีที่สุด แต่ถ้าเวลาที่จำเป็นในการบีบอัดข้อมูลมีความสำคัญมากกว่าอัตราส่วนคุณควรใช้มันไม่ได้ดีกว่า (ใช้ตัวเลือกที่ต่ำกว่านั่นคือ-1หรือบางอย่างระหว่าง)


2
+1; เพียงแค่อยากรู้อยากเห็น: คุณสามารถเพิ่มxz myfile?
JJoao

2
@JJoao ขอบคุณ! มันน่าสนใจฉันไม่คุ้นเคยxzแต่ฉันจะพิจารณาทันที ดูการอัปเดตโพสต์ของฉัน
apaul

3
xz -9กรุณาอย่าทำ มันเพิ่มหน่วยความจำที่จำเป็นสำหรับการบีบอัด / การบีบอัดอย่างมากโดยไม่ต้องปรับปรุงอัตราส่วนการบีบอัดอย่างมีนัยสำคัญ manpage บอกว่า (เน้นพวกมัน) "โดยเฉพาะมันไม่ใช่ความคิดที่ดีที่จะใช้ -9 แบบสุ่มสี่สุ่มห้าสำหรับทุก ๆ อย่างที่มักจะใช้กับ gzip (1) และ bzip2 (1)" เริ่มต้นxz -6เป็นที่ดีพอและแม้กระทั่งxz -0/ มักจะบีบอัดที่ดีกว่าxz -1 gzip -9
user49740

@ user49740 คุณพูดถูก ฉันไม่ค่อยได้ใช้-9แต่ฉันใช้ที่นี่เพราะฉันต้องการสร้างมาตรฐานสำหรับอัตราส่วนการบีบอัด "ในระดับเดียวกัน" แต่อีกครั้งคุณขวาทั้งหมด: -9มันเป็นความคิดที่ดีที่จะใช้สุ่มสี่สุ่มห้า
apaul

15

ฉันหาทางออกทาร์ด้วยตัวเอง
มันจะลบไฟล์เดียวหลังจากบีบอัดลงในไฟล์เป้าหมาย
อย่างไรก็ตามความเร็วในการบีบอัดยังไม่เร็วนัก คำสั่งมีลักษณะดังนี้:

tar -zcvf my_log.tar.gz *.log --remove-files

1
น้ำมันดินดี +1
Aaron Hall

1

ในส่วนเพิ่มเติมของ @apaul ฉันเน้นว่าการบีบอัดไฟล์แยกกัน

 bzip2 *.log.*

(แทนที่ bzip2 ด้วย gzip, xz หรือไฟล์ zip ที่คุณชื่นชอบ) อาจมีความสำคัญ:

วิธีนี้คุณจะยังคงเห็น ( bzcat file.bz2) ค้นหา ( bzgrep file.bz2) แก้ไข ( vi file.bz2) ไฟล์บีบอัดและลบไฟล์เก่าออกเมื่อจำเป็น


1

ฉันพยายามทำสิ่งนี้บน tar เวอร์ชั่น BSD ในกรณีนี้ตัวเลือก - ลบไฟล์ไม่สามารถใช้งานได้ สิ่งที่ฉันทำ (และทำงาน) คือ:

find folder_to_tar -type f -exec tar --append --file=output_tar_file.tar {} \; -exec rm -v {} \;

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