Bagaimana cara mengompres file di tempat?

20

Saya memiliki mesin dengan penggunaan hard disk 90%. Saya ingin mengompres file log 500+ ke file baru yang lebih kecil. Namun, hard disk terlalu kecil untuk menyimpan file asli dan yang terkompresi.

Jadi yang saya butuhkan adalah mengompres semua file log menjadi satu file baru satu per satu, menghapus setiap dokumen asli yang dikompres.

Bagaimana saya bisa melakukannya di Linux?

Zen
sumber
Duplikat: superuser.com/questions/378230
Hermann

Jawaban:

18

gzipatau bzip2akan mengkompres file dan menghapus yang tidak dikompres secara otomatis (ini adalah perilaku default mereka).

Namun, perlu diingat bahwa saat proses kompresi, kedua file akan ada.

Jika Anda ingin mengompres file log (yaitu: file yang berisi teks), Anda dapat memilih bzip2, karena memiliki rasio yang lebih baik untuk file teks.

bzip2 -9 myfile       # will produce myfile.bz2

Perbandingan dan contoh:

$ 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

UPDATE sebagai @Jjoao mengatakan kepada saya dalam komentar, menarik, xztampaknya memiliki rasio terbaik pada file polos dengan pilihan default:

$ xz -9 myfile

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

Untuk informasi lebih lanjut, berikut ini adalah tolok ukur yang menarik untuk alat yang berbeda: http://binfalse.de/2011/04/04/comparison-of-compression/

Untuk contoh di atas, saya gunakan -9untuk rasio kompresi terbaik, tetapi jika waktu yang dibutuhkan untuk kompres data lebih penting daripada rasio, Anda sebaiknya tidak menggunakannya (gunakan opsi yang lebih rendah, yaitu -1, atau sesuatu di antaranya).

apaul
sumber
2
+1; Hanya ingin tahu: dapatkah Anda menambahkan xz myfile?
JJoao
2
@ Jojo, terima kasih! Sangat menarik, saya tidak terbiasa menggunakannya xz, tetapi saya akan mempertimbangkannya sekarang. Lihat pembaruan posting saya.
apaul
3
Tolong jangan lakukan xz -9. Ini sangat meningkatkan memori yang diperlukan untuk kompresi / dekompresi, tanpa secara signifikan meningkatkan rasio kompresi. Halaman manual bahkan mengatakan (penekanan pada mereka) "Secara khusus, itu bukan ide yang baik untuk menggunakan -9 secara membabi buta untuk segala hal seperti itu sering dengan gzip (1) dan bzip2 (1)". Standarnya xz -6cukup baik, dan bahkan xz -0/ xz -1biasanya kompres lebih baik daripada gzip -9.
user49740
@ user49740 Anda benar. Saya jarang menggunakan -9, tapi saya menggunakannya di sini karena saya ingin membuat semacam tolok ukur untuk rasio kompresi "pada skala yang sama". Tetapi sekali lagi, Anda sepenuhnya benar: itu ide buruk untuk digunakan secara membabi buta -9.
apaul
15

Saya menemukan solusi tar sendiri.
Ini menghapus file tunggal setelah dikompres ke file target.
Namun, kecepatan kompresi tidak terlalu cepat. Perintahnya terlihat seperti:

tar -zcvf my_log.tar.gz *.log --remove-files
Zen
sumber
1
Bagus sekali. +1
Aaron Hall
1

Sebagai pelengkap @apaul, saya menekankan bahwa mengompresi file satu per satu

 bzip2 *.log.*

(ganti bzip2 dengan gzip, xz, atau apa pun zip file favorit Anda) mungkin penting:

Dengan cara ini Anda masih dapat melihat ( bzcat file.bz2), mencari ( bzgrep file.bz2), mengedit ( vi file.bz2) file yang dikompresi dan menghapus yang lebih lama bila perlu.

Joao
sumber
1

Saya mencoba melakukan ini pada tar versi BSD. Dalam hal ini, opsi --remove-files tidak tersedia. Apa yang akhirnya saya lakukan (dan berhasil) adalah:

find folder_to_tar -type f -exec tar --append --file=output_tar_file.tar {} \; -exec rm -v {} \;
pgilmon
sumber
Omong-omong, versi BSD adalah apa yang Anda dapatkan secara default jika Anda menggunakan MacOS
pgilmon