0

我在目录中有以下文件。

file001
file002
.
.
file009

我需要将它们压缩成一个并删除原始/源文件 ( file001 .. file009),以便释放一些磁盘空间。

这就是我所做的:使用以下命令将所有文件归档为一个

tar -cvf file00.tar file00*

然后使用以下命令压缩存档文件

xz file00.tar

以前我使用单个命令存档和压缩

tar -cJvf file00.tar.xz file00*

xz做得很好,将 10GB 文件压缩成不到 400MB,但我对这些方法有几个问题:

  1. 不删除旧/源文件
  2. xz 需要大量时间

我的问题是,有什么方法可以使用单个命令将多个文件归档并压缩成一个文件,该命令也会删除源文件?是否有任何其他压缩工具与 xz 一样高效但运行速度更快?

我在其他一些网站上看到我可以使用多个内核/线程来提升 xz 进程,但我自己没有尝试过。

提前致谢。

4

1 回答 1

3

您可以尝试pixz哪个是xz工具的并行变体(或pxzxz 的并行变体)):

tar -Ipixz -cf foo.tpxz foo/` 

tar有-I compressor选择非标准压缩器的选项,它应该在f选项之前,因为 f 选项需要字符串参数。

对于删除,GNU Tar https://www.gnu.org/software/tar/manual/html_node/remove-files.html中有一个选项(为什么它在“4.4 Options Used by --extract”部分??)

删除文件

请参阅该部分过于简洁。还有什么要补充的吗?一个例子,也许?

--remove-files

将文件添加到存档后删除它们。

我没有测试它,但它列在https://serverfault.com/questions/283355/correct-way-of-using-the-remove-files-option-with-tar(和https://superuser .com/questions/96860-f )在选项之前再次使用:

tar --remove-files -cvfj archive.tar.bz2 archive/

因此,结合这两个选项(安装pixz; 这仍然可以通过经典xz工具打开,也可以重命名为archive.tar.xz):

tar  -Ipixz --remove-files -cJvf file00.tpxz file00*

或与xz

tar  -Ixz --remove-files -cJvf file00.tar.xz file00*

PS:还有其他并行压缩器:pigz(gzip格式),pbzip2和lbzip2(bzip2格式,没有那么紧凑,比xz和gzip慢)。还有像lz4/lz5或 facebook's这样的快速压缩器zstd。还有一种lrzip可以使用多个线程进行压缩,并且可以找到长距离的重复数据,然后使用 lzma(默认情况下,类似 xz 的方法)或经典 gz 或更快的 LZO 或非常慢且有效的 ZPAQ 进行压缩。

于 2017-03-29T00:56:25.813 回答