Dosyaları yerinde nasıl sıkıştırırım?


20

% 90 sabit disk kullanımı olan bir makinem var. 500+ günlük dosyalarını daha küçük yeni bir dosyaya sıkıştırmak istiyorum. Ancak, sabit disk hem orijinal dosyaları hem de sıkıştırılmış dosyaları tutamayacak kadar küçüktür.

Yani ihtiyacım olan şey, tüm günlük dosyalarını tek bir yeni dosyaya tek tek sıkıştırmak ve sıkıştırılmış her orijinali silmek.

Bunu Linux'ta nasıl yapabilirim?


Yanıtlar:


18

gzipveya bzip2dosyayı sıkıştıracak ve sıkıştırılmamış dosyayı otomatik olarak kaldıracaktır (bu onların varsayılan davranıştır).

Ancak, sıkıştırma işlemi sırasında her iki dosyanın da mevcut olacağını unutmayın.

Günlük dosyalarını (yani: metin içeren dosyalar) sıkıştırmak istiyorsanız, bzip2metin dosyaları için daha iyi bir orana sahip olduğu için tercih edebilirsiniz .

bzip2 -9 myfile       # will produce myfile.bz2

Karşılaştırma ve örnekler:

$ 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

@Jjoao'nun bir yorumda söylediği gibi UPDATE , ilginç xzbir şekilde, varsayılan seçenekleriyle düz dosyalar üzerinde en iyi orana sahip gibi görünüyor:

$ xz -9 myfile

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

Daha fazla bilgi için, farklı araçlar için ilginç bir karşılaştırma: http://binfalse.de/2011/04/04/comparison-of-compression/

Yukarıdaki örnek -9için, en iyi sıkıştırma oranı için kullanıyorum, ancak verileri sıkıştırmak için gereken süre orandan daha önemliyse, kullanmamanız daha iyi olur (daha düşük bir seçenek kullanın, yani -1veya arasında bir şey kullanın).


2
+ 1; Sadece merak ettiniz xz myfilemi?
JJoao

2
@JJoao teşekkürler! İlginç, kullanmaya alışkın değilim xz, ama şimdi düşüneceğim. Yazımın güncellemesine bakın.
apaul

3
Lütfen yapma xz -9. Sıkıştırma oranını önemli ölçüde iyileştirmeden sıkıştırma / açma için gereken belleği büyük ölçüde artırır. Manpage bile (onlarınkini vurgulamaktadır) "Özellikle, sık sık gzip (1) ve bzip2 (1) ile olduğu gibi her şey için -9'u körü körüne kullanmak iyi bir fikir değildir ". Varsayılan değer xz -6yeterince iyidir ve hatta xz -0/ xz -1genellikle daha iyi sıkıştırır gzip -9.
user49740

@ user49740 haklısın. Nadiren kullanıyorum -9, ancak "aynı ölçekte" sıkıştırma oranı için bir tür kıyaslama yapmak istediğim için burada kullandım. Ama bir kez daha, tamamen haklısın: körü körüne kullanmak kötü bir fikir -9.
apaul

15

Kendi kendime bir katran çözümü buldum.
Hedef dosyaya sıkıştırıldıktan sonra tek bir dosyayı siler.
Sıkıştırma hızı oldukça hızlı değildir. Komut şuna benzer:

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

1
İyi 'tar tar. +1
Aaron Hall

1

@Apaul'un tamamlayıcısı olarak, dosyaları tek tek sıkıştırmanın

 bzip2 *.log.*

(bzip2'yi gzip, xz veya en sevdiğiniz dosya zip'inizle değiştirin) önemli olabilir:

Bu şekilde , sıkıştırılmış dosyayı yine de görebilir ( bzcat file.bz2), arayabilir ( bzgrep file.bz2), düzenleyebilir ( vi file.bz2) ve gerektiğinde eskilerini kaldırabilirsiniz.


1

Bunu tar'ın BSD versiyonunda yapmaya çalışıyordum. Bu durumda, --remove-files seçeneği kullanılamaz. Yaptığım (ve çalıştığım) şey:

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

Bu arada,
BSOS
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.