tar命令

tar 命令 #

tar命令是一个用于创建、查看和提取归档文件的工具。它的名称来源于"tape archive"(磁带归档),最初设计用于磁带备份。tar可以将多个文件和目录合并为一个文件,并可以选择性地使用压缩算法。

语法 #

tar [选项] [归档文件] [文件或目录...]

常用选项 #

选项 描述
-c 创建新归档
-x 从归档中提取文件
-t 列出归档内容
-f 指定归档文件名(几乎总是需要)
-v 详细模式,显示处理的文件
-z 使用 gzip 压缩/解压缩 (.tar.gz 或 .tgz)
-j 使用 bzip2 压缩/解压缩 (.tar.bz2)
-J 使用 xz 压缩/解压缩 (.tar.xz)
-p 保留权限
-P 保留绝对路径
--exclude=模式 排除匹配模式的文件
-C 目录 更改到指定目录
--strip-components=数字 提取时跳过指定数量的目录层级

常见用法 #

1. 创建 tar 归档(不压缩) #

tar -cf archive.tar file1 file2 directory

2. 创建 tar 归档并使用 gzip 压缩 #

tar -czf archive.tar.gz file1 file2 directory

tar -czf archive.tgz file1 file2 directory

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

tar -cjf archive.tar.bz2 file1 file2 directory

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

tar -cJf archive.tar.xz file1 file2 directory

5. 提取 tar 归档 #

tar -xf archive.tar

6. 提取 gzip 压缩的 tar 归档 #

tar -xzf archive.tar.gz

7. 提取 bzip2 压缩的 tar 归档 #

tar -xjf archive.tar.bz2

8. 提取 xz 压缩的 tar 归档 #

tar -xJf archive.tar.xz

9. 查看归档内容而不提取 #

tar -tf archive.tar

或者详细列出:

tar -tvf archive.tar

10. 提取到特定目录 #

tar -xf archive.tar -C /path/to/directory

11. 提取特定文件 #

tar -xf archive.tar file1 path/to/file2

12. 排除某些文件或目录 #

tar -czf archive.tar.gz directory --exclude=directory/subdirectory --exclude="*.log"

13. 使用通配符 #

tar -czf archive.tar.gz *.txt

14. 保留文件权限和所有权 #

tar -cpzf archive.tar.gz directory

15. 提取时跳过顶层目录 #

tar -xf archive.tar --strip-components=1

16. 追加文件到现有归档 #

tar -rf archive.tar newfile

17. 显示详细进度 #

tar -cvzf archive.tar.gz directory

常见压缩格式和扩展名 #

扩展名 压缩类型 tar 选项 描述
.tar 无压缩 -cf 仅归档,无压缩
.tar.gz.tgz gzip -czf 较快的压缩,适中的压缩率
.tar.bz2 bzip2 -cjf 较慢的压缩,较高的压缩率
.tar.xz xz -cJf 最慢的压缩,最高的压缩率

提示 #

  • 使用-v选项可以查看处理的文件,这在处理大型归档时很有用
  • 使用-t选项可以在提取前检查归档内容
  • 创建归档时,可以使用相对路径或绝对路径
  • 使用--exclude选项可以排除不需要的文件或目录
  • 使用-p选项可以保留文件权限和所有权,这在备份系统文件时很重要
  • 使用-C选项可以在提取前更改到指定目录
  • 使用--strip-components选项可以在提取时跳过顶层目录
  • 对于大型归档,可以使用pv命令显示进度:
    pv archive.tar.gz | tar -xzf -
    
  • 使用-a选项可以根据文件扩展名自动选择压缩格式:
    tar -caf archive.tar.gz directory  # 使用gzip
    tar -caf archive.tar.bz2 directory  # 使用bzip2
    tar -caf archive.tar.xz directory   # 使用xz