在linux中如何将多个文件存档和压缩为一个并删除源文件?

时间:2017-03-28 23:39:17

标签: linux compression archive bzip2 xz

我在目录中有以下文件。

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花费大量时间
  3. 我的问题是,是否有任何方法可以使用单个命令将多个文件存档和压缩为一个文件,同时删除源文件?是否有其他压缩工具可以使用?效率为xz但效果更快?

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

    提前致谢。

1 个答案:

答案 0 :(得分:3)

您可以尝试pixz history = syncHistoryWithStore(history, store); 工具(或xz xz的并行变体)的并行变体):

pxz

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

对于删除,GNU Tar https://www.gnu.org/software/tar/manual/html_node/remove-files.html中有选项(为什么它出现在“f使用的4.4选项”中?)

  

删除文件

     

参见该部分太简洁了。还有什么要补充的吗?一个例子,也许?

     

--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

PS:还有其他并行压缩器:tar -Ixz --remove-files -cJvf file00.tar.xz file00* (gzip格式),pbzip2和lbzip2(bzip2格式,不是那么紧凑,比xz和gzip慢)。还有快速压缩器,如pigz / lz4或facebook的lz5。并且有lrzip可以使用多个线程进行压缩,并且可以长距离重复数据,然后使用lzma(by default,类似xz的方法)或经典gz或更快的LZO进行压缩。缓慢而有效的ZPAQ。