ファイルをインプレースで圧縮するにはどうすればよいですか?


20

ハードディスクの使用率が90%のマシンがあります。500個以上のログファイルを小さな新しいファイルに圧縮したい。ただし、ハードディスクは小さすぎて、元のファイルと圧縮ファイルの両方を保持できません。

したがって、必要なのは、すべてのログファイルを1つずつ新しいファイルに圧縮し、圧縮された元の各ファイルを削除することです。

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

UPDATE @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/comparison-of-compression/

上記の例で-9は、最高の圧縮率を使用していますが、データの圧縮に必要な時間が比率よりも重要な場合は、それを使用しない方がよいでしょう(低いオプション、つまり-1、またはその間の何かを使用します)。


2
+1; 好奇心が強い:を追加できますxz myfileか?
JJoao

2
@JJoaoありがとう!おもしろいです、私はを使用するのxzに慣れていませんが、今それを検討します。私の投稿の更新を参照してください。
-apaul

3
しないでくださいxz -9。圧縮率を大幅に改善することなく、圧縮/解凍に必要なメモリを大幅に増やします。マンページには、「特に、gzip(1)とbzip2(1)でよくあるように、すべてを盲目的に-9を使用するのは得策ではありません」と言われています。デフォルトxz -6で十分であり、さらにxz -0/ xz -1は通常よりも圧縮率が高くなりgzip -9ます。
user49740

@ user49740そのとおりです。私はめったに使用しませんが-9、圧縮率のベンチマークを「同じスケールで」作成したかったので、ここで使用しました。しかし、もう一度、あなたは完全に正しいです:盲目的に使用することは悪い考え-9です。
アポール

15

私は自分でtarソリューションを見つけました。
ターゲットファイルに圧縮した後、単一のファイルを削除します。
ただし、圧縮速度はそれほど速くありません。コマンドは次のようになります。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.