Як стискати файли на місці?


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

ОНОВЛЕННЯ, як @Jjoao сказав мені в коментарі, що цікаво, 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/comppare-of-compression/

Для наведеного вище прикладу я використовую -9найкращий коефіцієнт стиснення, але якщо час, необхідний для стиснення даних, важливіше співвідношення, то краще не використовувати його (використовувати нижчий варіант, тобто -1або щось середнє).


2
+1; Просто цікаво: ви могли б додати xz myfile?
JJoao

2
@JJoao дякую! Це цікаво, я не звик користуватися xz, але зараз це розгляну. Дивіться оновлення моєї публікації.
apaul

3
Будь ласка, не робіть xz -9. Це значно збільшує пам'ять, необхідну для стиснення / декомпресії, без істотного поліпшення коефіцієнта стиснення. На сторінці вказується навіть (наголошуючи їх) "Зокрема, не годиться сліпо використовувати -9 для всього, як це часто, з gzip (1) та bzip2 (1)". За замовчуванням xz -6досить добре, і навіть xz -0/ xz -1зазвичай стискати краще, ніж gzip -9.
user49740

@ user49740 ви праві. Я дуже рідко використовую -9, але тут я його використовував, оскільки хотів зробити якийсь показник для коефіцієнта стиснення "в одній шкалі". Але знову ж таки, ви абсолютно праві: погана ідея сліпо використовувати -9.
апаул

15

Я сам розібрався з дьогтем.
Після видавлення його в цільовий файл він видаляє один файл.
Хоча швидкість стиснення не дуже швидка. Команда виглядає так:

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

1
Хороший ол тар. +1
Аарон Хол

1

На додаток до @apaul, наголошую, що стискання файлів здійснюється індивідуально

 bzip2 *.log.*

(замініть bzip2 на gzip, xz або будь-який ваш улюблений файл zip) може бути важливим:

Таким чином ви все ще можете бачити ( bzcat file.bz2), шукати ( bzgrep file.bz2), редагувати ( vi file.bz2) стислий файл та видаляти старіші, коли це необхідно.


1

Я намагався це зробити на BSD-версії tar. У цьому випадку опція --remove-files недоступна. Що я в кінцевому підсумку робив (і працював):

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

До речі, версія BSD - це те, що ви отримуєте за замовчуванням, якщо вам трапляється використовувати MacOS
pgilmon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.