Jak kompresować pliki w miejscu?


20

Mam komputer z 90% wykorzystaniem dysku twardego. Chcę skompresować ponad 500 plików dziennika do nowego, mniejszego pliku. Dysk twardy jest jednak zbyt mały, aby zachować zarówno oryginalne, jak i skompresowane pliki.

Więc potrzebuję skompresować wszystkie pliki dziennika do jednego nowego pliku jeden po drugim, usuwając każdy oryginalny raz skompresowany.

Jak mogę to zrobić w systemie Linux?


Odpowiedzi:


18

gziplub bzip2skompresuje plik i automatycznie usunie nieskompresowany plik (jest to ich domyślne zachowanie).

Należy jednak pamiętać, że podczas procesu kompresji oba pliki będą istnieć.

Jeśli chcesz kompresować pliki dziennika (tzn. Pliki zawierające tekst), możesz preferować bzip2, ponieważ ma on lepszy stosunek do plików tekstowych.

bzip2 -9 myfile       # will produce myfile.bz2

Porównanie i przykłady:

$ 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

AKTUALIZACJA, jak @Jjoao powiedział mi w komentarzu, co ciekawe, xzwydaje się mieć najlepszy stosunek do zwykłych plików z domyślnymi opcjami:

$ xz -9 myfile

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

Aby uzyskać więcej informacji, oto interesujący punkt odniesienia dla różnych narzędzi: http://binfalse.de/2011/04/04/comparison-of-compression/

W powyższym przykładzie używam -9najlepszego współczynnika kompresji, ale jeśli czas potrzebny na kompresowanie danych jest ważniejszy niż współczynnik, lepiej nie używaj go (użyj niższej opcji, tj. -1Lub czegoś pomiędzy).


2
+1; Ciekawe: czy możesz dodać xz myfile?
JJoao,

2
@JJoao dzięki! To ciekawe, nie jestem przyzwyczajony do używania xz, ale rozważę to teraz. Zobacz aktualizację mojego postu.
apaul

3
Proszę nie robić xz -9. To znacznie zwiększa pamięć wymaganą do kompresji / dekompresji, bez znaczącej poprawy współczynnika kompresji. Strona podręcznika mówi nawet (podkreślając swoją): „W szczególności nie jest dobrym pomysłem ślepe używanie opcji -9 do wszystkiego, co często ma miejsce w przypadku gzip (1) i bzip2 (1)”. Domyślnie xz -6jest wystarczająco dobry, a nawet xz -0/ xz -1zwykle kompresuje lepiej niż gzip -9.
user49740,

@ user49740 masz rację. Rzadko go używam -9, ale użyłem go tutaj, ponieważ chciałem zrobić jakiś test porównawczy dla współczynnika kompresji „w tej samej skali”. Ale znowu masz całkowitą rację: używanie na ślepo to zły pomysł -9.
apaul

15

Sam opracowałem rozwiązanie smoły.
Usuwa pojedynczy plik po skompresowaniu go do pliku docelowego.
Szybkość kompresji nie jest jednak dość duża. Polecenie wygląda następująco:

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

1
Dobra smoła. +1
Aaron Hall

1

W uzupełnieniu do @apaul podkreślam, że kompresowanie plików indywidualnie

 bzip2 *.log.*

(zamień bzip2 na gzip, xz lub inny ulubiony plik zip) może być ważny:

W ten sposób nadal możesz zobaczyć ( bzcat file.bz2), wyszukać ( bzgrep file.bz2), edytować ( vi file.bz2) skompresowany plik i usunąć starsze, jeśli to konieczne.


1

Próbowałem to zrobić w wersji tar tar BSD. W takim przypadku opcja --remove-files nie jest dostępna. Skończyło się (i pracowałem) to:

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

Nawiasem mówiąc, wersja BSD jest domyślnie dostępna, jeśli używasz MacOS
pgilmon
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.