如何原地压缩文件?


20

我有一台具有90%硬盘使用率的计算机。我想将其500多个日志文件压缩为一个较小的新文件。但是,硬盘太小,无法保存原始文件和压缩文件。

因此,我需要将所有日志文件一个一个地压缩为一个新文件,并在压缩后删除每个原始文件。

如何在Linux中做到这一点?


Answers:


18

gzipbzip2将压缩文件并自动删除未压缩的文件(这是它们的默认行为)。

但是,请记住,在压缩过程中,两个文件都将存在。

如果要压缩日志文件(即包含文本的文件),则最好使用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在评论中告诉我的UPDATExz对于具有默认选项的纯文件来说,似乎是最好的比率:

$ 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 2015年

2
@JJoao谢谢!有趣的是,我不习惯使用xz,但现在考虑一下。请参阅我的帖子的更新。
apaul 2015年

3
请不要做xz -9。它大大增加了压缩/解压缩所需的内存,而没有显着提高压缩率。该联机帮助页甚至说(强调他们的)“特别是,对gzip(1)和bzip2(1)经常使用-9并不是一个好主意 ”。默认值xz -6足够好,甚至xz -0/ xz -1通常比压缩效果更好gzip -9
user49740 2015年

@ user49740你是对的。我很少使用-9,但是我在这里使用它是因为我想“以相同的比例”为压缩比建立某种基准。但是,再次重申,您完全正确:盲目使用并不是一个好主意-9
apaul 2015年

15

我自己想出了一种焦油解决方案。
它将单个文件压缩为目标文件后将其删除。
但是,压缩速度不是很快。该命令如下所示:

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

1
好的'焦油。+1
亚伦音乐厅

1

为了补充@apaul,我强调单独压缩文件

 bzip2 *.log.*

(用gzip,xz或其他您喜欢的文件zip替换bzip2)可能很重要:

这样,您仍然可以看到(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 {} \;

顺便说一句,如果您恰好使用MacOS,则BSD版本是您默认获得的版本
pgilmon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.