ハードディスク使用率が90%のマシンを使用しています。 500以上のログファイルをより小さな新しいファイルに圧縮します。ただし、ハードディスクが小さすぎて、元のファイルと圧縮されたファイルの両方を保持できません。
したがって、必要なのは、すべてのログファイルを1つの新しいファイルに1つずつ圧縮し、圧縮された各オリジナルを削除することです。
Linuxではどうすればよいですか?
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
、またはその間の何か)。
私は自分でtarソリューションを見つけました。
ターゲットファイルに圧縮した後、単一のファイルを削除します。
ただし、圧縮速度はそれほど速くありません。コマンドは次のようになります。
tar -zcvf my_log.tar.gz *.log --remove-files
私はこれをBSDバージョンのtarでやろうとしていました。この場合、-remove-filesオプションは使用できません。私がやった(そして働いた)のは:
find folder_to_tar -type f -exec tar --append --file=output_tar_file.tar {} \; -exec rm -v {} \;
@apaulの補足として、ファイルを個別に圧縮することを強調します
bzip2 *.log.*
(bzip2をgzip、xz、またはお気に入りのファイルZipで置き換えてください)が重要な場合があります。
このようにして、(bzcat file.bz2
)、 探す (bzgrep file.bz2
)、編集(vi file.bz2
)圧縮ファイルを作成し、必要に応じて古いファイルを削除します。