标签: xz

为什么 tar 存档格式切换到 xz 压缩以替换 bzip2 而 gzip 呢?

越来越多的tar存档使用xz基于 LZMA2的格式进行压缩,而不是传统的bzip2(bz2)压缩。事实上,kernel.org2013 年 12 月 27日晚发布了“再见 bzip2公告,表明内核源代码将从此时起以 tar.gz 和 tar.xz 格式发布 - 并在网站主页上发布直接提供的是在tar.xz.

是否有任何具体原因可以解释为什么会发生这种情况以及gzip在这种情况下的相关性是什么?

gzip history bzip2 xz

225
推荐指数
4
解决办法
8万
查看次数

RHEL6 + 错误:xz 压缩不可用

yumRHEL Server 6.6 系统上安装软件包时,出现以下错误:

$ sudo yum install foo
Loaded plugins: product-id, rhnplugin, security, subscription-manager
This system is receiving updates from RHN Classic or RHN Satellite.
Setting up Install Process
Error: xz compression not available
Run Code Online (Sandbox Code Playgroud)

搜索引擎搜索表明该pyliblzma包丢失。

我无法安装它,sudo yum install pyliblzma因为我遇到了同样的xz compression not available错误。

相反,我下载了 RPM 存档并通过rpm以下方式安装了它:

$ wget http://download.fedoraproject.org/pub/epel/6/SRPMS/pyliblzma-0.5.3-3.el6.src.rpm
$ sudo rpm -ivh pyliblzma-0.5.3-3.el6.src.rpm
Run Code Online (Sandbox Code Playgroud)

好像没有安装成功;以下不返回任何结果:

$ rpm -qa | grep pyliblzma
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能正确安装pyliblzma和修复xz compression not available错误?

yum rpm rhel xz

8
推荐指数
1
解决办法
2万
查看次数

如何动态(并递归地)将所有文件从 gzip 转换为 xz?

我有一个带有 gzip 文件的目录树,如下所示:

basedir/a/file.dat.gz
basedir/b/file.dat.gz
basedir/c/file.dat.gz
etc.
Run Code Online (Sandbox Code Playgroud)

如何使用单个命令将所有这些从 gzip 转换为 xz 而不将每个文件解压缩到磁盘?

带有解压到磁盘的简单的两行代码如下所示:

find basedir/ -type f -name '*.dat.gz' -exec gzip -d {} \;
find basedir/ -type f -name '*.dat' -exec xz {} \;
Run Code Online (Sandbox Code Playgroud)

第一个命令甚至可以更短: gunzip -r *

对于单个文件,即时转换很简单(尽管这不会替换 .gz 文件):

gzip -cd basedir/a/file.dat.gz | xz > basedir/a/file.dat.xz
Run Code Online (Sandbox Code Playgroud)

由于 gzip 和 xz 自己处理扩展,我想说:

gunzip -rc * > xz
Run Code Online (Sandbox Code Playgroud)

我看了find | xargs basename -s .gz { }一点,但没有得到一个有效的解决方案。

我可以写一个shell脚本,但我觉得应该有一个简单的解决方案。


编辑

感谢所有已经回答的人。我知道我们都喜欢“永不失败的命令™”。所以,为了简单起见:

  • 所有子目录仅包含数字、字母(尽管是 äöü)、下划线和减号。
  • 所有文件都命名为file.dat[.n].gz,n为正整数
  • 任何目录或文件都不会在任何地方具有“.gz”(除了作为最终文件后缀)。
  • 这是这些目录包含的唯一内容。
  • 我控制命名并可以在需要时对其进行限制。

使用简单的find -exec …

pipe gzip recursive conversion xz

7
推荐指数
2
解决办法
4562
查看次数

有任意大字典的压缩工具吗?

我正在寻找具有任意大字典(和“块大小”)的压缩工具。让我通过例子来解释。

首先让我们创建 32MB 的随机数据,然后将其连接到自身以制作长度为 64MB 的两倍长度的文件。

head -c32M /dev/urandom > test32.bin
cat test32.bin test32.bin > test64.bin
Run Code Online (Sandbox Code Playgroud)

当然test32.bin不可压缩,因为它是随机的,但前半部分和后半部分test64.bin是一样的,所以应该可以压缩大约 50%。

首先让我们尝试一些标准工具。test64.bin 的大小正好是 67108864。

  • gzip -9。压缩大小 67119133。
  • bzip2 -9。压缩大小 67409123。(开销很大!)
  • xz -7。压缩大小 67112252。
  • xz -8。压缩大小 33561724。
  • zstd --ultra -22。压缩大小 33558039。

我们从中了解到 gzip 和 bzip2 永远不能压缩这个文件。然而,使用足够大的字典 xz 和 zstd 可以压缩文件,在这种情况下, zstd 做得最好。

但是,现在尝试:

head -c150M /dev/urandom > test150.bin
cat test150.bin test150.bin > test300.bin
Run Code Online (Sandbox Code Playgroud)

test300.bin 的大小正好是 314572800。让我们在最高设置下再次尝试最佳压缩算法。

  • xz -9。压缩尺寸 314588440
  • zstd --ultra -22。压缩尺寸 314580017

在这种情况下,两个工具都不能压缩文件。

有没有一个工具可以有任意大的字典大小,所以它可以压缩像 test300.bin 这样的文件?


感谢评论和回答,结果证明 zstd 和 …

compression gzip bzip2 xz zstd

7
推荐指数
1
解决办法
741
查看次数

调整 logrotate 以使用 xz 来记录日志

在当前的 Debian 测试机器上,我想使用 xz 而不是 GZip 来压缩日志文件。它具有较高的开箱即用压缩率,因此我希望使用它。

但是,每当我在 logrotate 配置中指定它时,logrotate 就会说它无法用于xz压缩。它只是说该文件无法执行,即使它在系统和用户 shell 中的其他任何地方都可以工作。

有什么办法可以调试这个吗?

logrotate debian xz

6
推荐指数
1
解决办法
2324
查看次数

有没有办法在不解压缩整个存档的情况下验证 xz 存档的完整性?

我可以在不解压缩的情况下检查存档的完整性吗,因为存档是 64GB。这是我旧笔记本电脑的备份,在我格式化旧笔记本电脑之前,我想验证备份,但解压缩和验证需要很长时间。那么有没有更快的方法呢?

tar archive compression integrity xz

5
推荐指数
1
解决办法
2419
查看次数

有没有办法检查xz压缩文件的压缩率?

在 Windows 中,默认情况下可以看到 zip 文件的压缩率,安装 WinRAR 后,它也支持此功能,但目前我使用的是 linux 并使用 lzma2 和 xz 作为容器压缩了一个文件,但如何在没有的情况下检查压缩率比较原始文件大小和压缩文件大小?甚至有可能吗?

tar archive compression xz

5
推荐指数
1
解决办法
3426
查看次数

写入磁盘并同时使用 xz 压缩

我有一个在磁盘上写入跟踪的程序,并且大小变得非常大。通常,我使用以下命令。

./run output.txt
xz output.txt
Run Code Online (Sandbox Code Playgroud)

我可以在写入 output.txt 的同时管道 xz 吗?

我阅读了如何将所有文件从 gzip 动态转换为 xz(并递归地)?,但我不确定它是否适用于我的情况。

bash pipe xz

5
推荐指数
1
解决办法
1853
查看次数

如何通过 .xz 来“grep”压缩文件?

我正在使用 Red Hat Virtualization ( RHV ),它将所有文件记录在此目录中:

$ pwd
/var/log/vdsm

$ ls | column -c 80 | head -10
backup          vdsm.log.34.xz      vdsm.log.69.xz
import          vdsm.log.35.xz      vdsm.log.6.xz
mom.log         vdsm.log.36.xz      vdsm.log.70.xz
mom.log.1       vdsm.log.37.xz      vdsm.log.71.xz
mom.log.2       vdsm.log.38.xz      vdsm.log.72.xz
mom.log.3       vdsm.log.39.xz      vdsm.log.73.xz
mom.log.4       vdsm.log.3.xz       vdsm.log.74.xz
mom.log.5       vdsm.log.40.xz      vdsm.log.75.xz
supervdsm.log   vdsm.log.41.xz      vdsm.log.76.xz
upgrade.log     vdsm.log.42.xz      vdsm.log.77.xz
Run Code Online (Sandbox Code Playgroud)

我已经使用&z*等工具来查看&文件,但它似乎不处理压缩。zgrepzcat.gz.Z.xz

grep浏览文件目录的简单方法是什么.xz

grep xz

5
推荐指数
1
解决办法
1万
查看次数

XZ - 无法分配内存

如果我运行这个命令:

XZ_OPT=-9 tar --xz -cvf files/compressed/xz/archive.tar.xz -C files/original/ .
Run Code Online (Sandbox Code Playgroud)

收到这条消息:

xz: (stdin): Cannot allocate memory
tar: files/compressed/lzma//archive.lzma: Wrote only 4096 of 10240 bytes
tar: Error is not recoverable: exiting now
Run Code Online (Sandbox Code Playgroud)

它是什么类型的内存?或者我如何设置它以使其工作。

编辑:(附加信息)

我要压缩的总文件大小:18.92M

Gzip Bzip2 ZIP - 工作正常

xz --info-memory

Total amount of physical memory (RAM):  595 MiB (623116288 B)
Memory usage limit for compression:     Disabled
Memory usage limit for decompression:   Disabled
Run Code Online (Sandbox Code Playgroud)

ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority …
Run Code Online (Sandbox Code Playgroud)

shell tar debian xz

4
推荐指数
1
解决办法
5908
查看次数

标签 统计

xz ×10

compression ×3

gzip ×3

tar ×3

archive ×2

bzip2 ×2

debian ×2

pipe ×2

bash ×1

conversion ×1

grep ×1

history ×1

integrity ×1

logrotate ×1

recursive ×1

rhel ×1

rpm ×1

shell ×1

yum ×1

zstd ×1