xz命令

xz命令 #

xz命令是一个高效的压缩工具,使用LZMA2算法进行压缩。它提供了比传统的gzipbzip2更高的压缩率,但压缩和解压缩速度较慢。xz格式在Linux系统中越来越流行,特别是用于软件包分发。

语法 #

xz [选项] [文件...]

常用选项 #

选项 描述
-z, --compress 强制压缩(默认)
-d, --decompress, --uncompress 解压缩
-t, --test 测试压缩文件的完整性
-l, --list 显示压缩文件的信息
-k, --keep 保留原始文件(默认会删除)
-f, --force 强制覆盖输出文件或压缩链接
-c, --stdout, --to-stdout 将结果写入标准输出
-0 .. -9 压缩预设级别(0=最快,9=最高压缩率,默认为6)
-e, --extreme 尝试提高压缩率(但会显著增加压缩时间)
-T, --threads=NUM 使用最多NUM个线程(默认为1)
-q, --quiet 抑制警告和通知
-v, --verbose 显示详细信息
-h, --help 显示帮助信息
-V, --version 显示版本信息

常见用法 #

1. 压缩单个文件 #

xz file.txt

这将创建file.txt.xz并删除原始文件。

2. 压缩文件并保留原始文件 #

xz -k file.txt

3. 解压缩文件 #

xz -d file.txt.xz

或使用unxz命令:

unxz file.txt.xz

4. 压缩多个文件 #

xz file1.txt file2.txt file3.txt

5. 将压缩结果输出到标准输出 #

xz -c file.txt > file.txt.xz

6. 设置压缩级别 #

# 最快压缩,压缩率最低
xz -0 file.txt

# 最慢压缩,压缩率最高
xz -9 file.txt

7. 使用极限压缩模式 #

xz -e file.txt

8. 使用多线程压缩 #

xz -T 4 file.txt

这会使用4个线程进行压缩。

9. 测试压缩文件的完整性 #

xz -t file.txt.xz

10. 显示压缩文件信息 #

xz -l file.txt.xz

输出示例:

Strms  Blocks   Compressed Uncompressed  Ratio  Check   Filename
    1       1      8,292 B     14,536 B  0.570  CRC64   file.txt.xz

11. 显示详细信息 #

xz -v file.txt

输出示例:

file.txt (1/1)
  100 %        8,292 B / 14,536 B = 0.570                                      

12. 强制覆盖已存在的压缩文件 #

xz -f file.txt

与其他命令结合使用 #

1. 压缩并通过网络传输文件 #

xz -c large_file | ssh user@remote "cat > large_file.xz"

2. 解压缩并查看文件内容 #

xz -dc file.txt.xz | less

或使用xzcat命令:

xzcat file.txt.xz | less

3. 创建tar归档并使用xz压缩 #

tar -cf - directory/ | xz > directory.tar.xz

或直接使用tar的J选项:

tar -cJf directory.tar.xz directory/

4. 比较两个压缩文件的内容 #

xz -dc file1.xz | diff - <(xz -dc file2.xz)

或使用xzdiff命令:

xzdiff file1.xz file2.xz

5. 在压缩文件中搜索 #

xz -dc file.txt.xz | grep "pattern"

或使用xzgrep命令:

xzgrep "pattern" file.txt.xz

相关命令 #

  • unxz:解压缩xz文件(等同于xz -d
  • xzcat:查看xz压缩文件的内容(等同于xz -dc
  • xzless:使用less分页查看xz压缩文件的内容
  • xzgrep:在xz压缩文件中搜索模式
  • xzdiff:比较xz压缩文件的内容
  • xzmore:使用more分页查看xz压缩文件的内容

文件扩展名 #

xz压缩文件通常使用以下扩展名:

  • .xz:标准xz文件
  • .txz.tar.xz:使用xz压缩的tar归档

实用示例 #

1. 压缩大文件并显示进度 #

pv large_file | xz > large_file.xz

2. 批量压缩所有文本文件 #

find . -name "*.txt" -exec xz {} \;

3. 批量解压缩所有.xz文件 #

find . -name "*.xz" -exec unxz {} \;

4. 压缩并分割大文件 #

xz -c huge_file | split -b 100m - huge_file.xz.part

5. 合并分割的压缩文件并解压缩 #

cat huge_file.xz.part* | unxz > huge_file

6. 比较压缩前后的文件大小 #

ls -l file.txt
xz -k file.txt
ls -l file.txt.xz

7. 压缩标准输入的数据 #

cat file.txt | xz > file.txt.xz

8. 使用最高压缩率和多线程 #

xz -9e -T 4 file.txt

性能比较 #

xz与其他压缩工具的一般性能比较:

工具 压缩率 压缩速度 解压缩速度
gzip 中等 非常快
bzip2
xz 非常高 非常慢 中等

提示 #

  • xz默认会删除原始文件,使用-k选项可以保留原始文件
  • 使用-c选项可以将压缩结果输出到标准输出,这在管道操作中很有用
  • 使用-t选项可以检查压缩文件的完整性,而不实际解压缩
  • 在脚本中,通常使用-f选项忽略错误
  • 对于大文件,使用-T选项可以显著提高压缩和解压缩速度
  • xz只压缩单个文件,不会将多个文件合并为一个压缩文件(这需要先使用tar
  • 对于已经压缩的文件(如JPEG、MP3、ZIP等),xz的效果不明显
  • 使用-0-9选项可以在压缩速度和压缩率之间取得平衡
  • 使用-e选项可以获得更高的压缩率,但会显著增加压缩时间
  • xz压缩的文件可以用unxzxz -dxzcat解压缩
  • 在Linux系统中,许多命令都有对应的xz前缀版本,如xzcatxzlessxzgrep等,可以直接操作xz压缩文件