如何就地压缩文件?

Zen*_*Zen 26 command-line tar compression gzip disk-usage

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

所以我需要的是将所有的日志文件一个一个地压缩成一个新的文件,压缩后删除每个原始文件。

我怎样才能在 Linux 中做到这一点?

apa*_*aul 23

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

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

如果您想压缩日志文件(即:包含文本的文件),您可能更喜欢bzip2,因为它对文本文件有更好的比率。

bzip2 -9 myfile       # will produce myfile.bz2
Run Code Online (Sandbox Code Playgroud)

比较和示例:

$ 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
Run Code Online (Sandbox Code Playgroud)

正如@Jjoao 在评论中告诉我的那样更新,有趣的是,xz它的默认选项似乎对普通文件有最佳比例:

$ xz -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 109384 29 april 10:09 myfile.xz
Run Code Online (Sandbox Code Playgroud)

有关更多信息,这里是不同工具的有趣基准:http : //binfalse.de/2011/04/04/comparison-of-compression/

对于上面的示例,我使用-9了最佳压缩率,但是如果压缩数据所需的时间比压缩率更重要,则最好不要使用它(使用较低的选项,即-1,或介于两者之间的选项)。

  • 请不要做`xz -9`。它大大增加了压缩/解压缩所需的内存,而没有显着提高压缩比。手册页甚至说(强调他们的)“特别是,**盲目地对所有内容使用 -9 并不是一个好主意**,就像 gzip(1) 和 bzip2(1) 经常使用的那样”。默认的 `xz -6` 已经足够好,甚至 `xz -0`/`xz -1` 通常比 `gzip -9` 压缩得更好。 (3认同)
  • +1; 只是好奇:你能添加一个 `xz myfile` 吗? (2认同)
  • @JJoao 谢谢!很有趣,我不习惯使用`xz`,但我现在会考虑它。看我帖子的更新。 (2认同)

Zen*_*Zen 20

我自己想出了一个焦油解决方案。
将单个文件压缩到目标文件后删除。
不过压缩速度不是很快。命令看起来像:

tar -zcvf my_log.tar.gz *.log --remove-files
Run Code Online (Sandbox Code Playgroud)

  • 好焦油。+1 (2认同)