【问题标题】:In linux how to archive and compress multiple files into one and remove source files?在linux中如何将多个文件归档并压缩为一个并删除源文件?
【发布时间】:2017-08-22 05:57:45
【问题描述】:

我在一个目录中有以下文件。

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 进程,但我自己没有尝试过。

提前致谢。

【问题讨论】:

  • 你可以试试pixz,它是xz工具的并行变体(还有pxz xz的并行变体):tar -Ipixz -cf foo.tpxz foo/(有-I compressor tar的选项可供选择非标准压缩机)。
  • 你可以试试 zstdmt。对于高压缩的 4 个核心,它会给出类似的结果:tar -cvf - file00* | zstdmt -19 -T4 > file00.tar.zst

标签: linux compression archive bzip2 xz


【解决方案1】:

您可以尝试pixz,它是xz 工具的并行变体(或pxz xz 的并行变体):

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 由 --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的zstd这样的快速压缩器。还有lrzip,它可以使用多个线程进行压缩,并且可以找到长距离的重复数据,然后使用lzma(by default,类似xz的方法)或经典gz或更快的LZO或非常慢且有效的ZPAQ进行压缩.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多