tar:磁带归档(tape archive)工具
tar 是 Unix/Linux 系统中最经典的归档工具,最初用于磁带备份,现在在其他存储设备上也能发挥同样出色的作用。它能够将多个文件和目录打包成一个单独的文件,常与压缩工具结合使用。
tar mode[options] [archive-file] [file/directory...]
操作模式(Mode)
| 模式 | 全称 | 描述 |
|---|---|---|
-c |
--create |
创建新的归档文件 |
-x |
--extract |
从归档文件中提取文件 |
-t |
--list |
列出归档文件内容 |
-r |
--append |
追加文件到归档末尾 |
-u |
--update |
仅追加比归档中更新的文件 |
-d |
--compare |
比较归档与文件系统的差异 |
-A |
--catenate |
合并多个tar文件 |
--delete |
从归档中删除文件 |
常用选项
| 选项 | 全称 | 描述 |
|---|---|---|
-f |
--file |
指定归档文件名 |
-v |
--verbose |
显示详细操作信息 |
-z |
--gzip |
通过gzip压缩/解压归档 |
-j |
--bzip2 |
通过bzip2压缩/解压归档 |
-J |
--xz |
通过xz压缩/解压归档 |
--lzma |
通过lzma压缩/解压归档 | |
--lzip |
通过lzip压缩/解压归档 | |
--lzop |
通过lzop压缩/解压归档 | |
-a |
--auto-compress |
根据后缀名自动选择压缩方式 |
--wildcards |
使用通配符匹配文件名 | |
--exclude |
排除匹配模式的文件 | |
-T |
--files-from |
从文件读取要处理的文件列表 |
-X |
--exclude-from |
从文件读取排除模式 |
-C |
--directory |
指定工作目录 |
常用扩展名约定
| 扩展名 | 含义 | 创建命令 |
|---|---|---|
.tar |
未压缩的tar归档 | tar cf archive.tar files |
.tar.gz.tgz
|
gzip压缩的tar归档 | tar czf archive.tar.gz files |
.tar.bz2.tbz.tbz2
|
bzip2压缩的tar归档 | tar cjf archive.tar.bz2 files |
.tar.xz.txz
|
xz压缩的tar归档 | tar cJf archive.tar.xz files |
.tar.lzma |
lzma压缩的tar归档 | tar --lzma -cf archive.tar.lzma files |
.tar.lzo |
lzop压缩的tar归档 | tar --lzop -cf archive.tar.lzo files |
.tar.zst |
zstd压缩的tar归档 | tar --zstd -cf archive.tar.zst files |
示例
创建归档
# 创建未压缩的tar归档
tar cf archive.tar file1.txt file2.txt directory/
# 创建gzip压缩的归档
tar czf archive.tar.gz directory/
# 创建bzip2压缩的归档
tar cjf archive.tar.bz2 directory/
# 创建xz压缩的归档(最高压缩率)
tar cJf archive.tar.xz directory/
# 根据扩展名自动选择压缩方式
tar caf archive.tgz directory/
tar caf archive.tbz directory/
列出归档内容
# 列出归档内容
tar tf archive.tar
# 详细列出(显示权限、所有者、大小等)
tar tvf archive.tar.gz
# 列出特定目录的内容
tar tvf archive.tar docs/
# 使用通配符列出
tar tvf archive.tar --wildcards '*.txt'
提取归档
# 提取到当前目录
tar xf archive.tar
# 提取到指定目录
tar xf archive.tar -C /path/to/destination/
# 提取gzip压缩的归档
tar xzf archive.tar.gz
# 提取bzip2压缩的归档
tar xjf archive.tar.bz2
# 提取xz压缩的归档
tar xJf archive.tar.xz
# 提取单个文件
tar xf archive.tar file.txt
# 提取多个文件
tar xf archive.tar "file1.txt" "file2.txt"
# 提取匹配模式的文件
tar xf archive.tar --wildcards '*.conf'
排除文件模式
排除特定文件
tar czf backup.tar.gz /home/user \
--exclude="*.mp3" \
--exclude="*.mp4" \
--exclude=".cache" \
--exclude="Downloads/*.iso"
从文件读取排除列表
cat > exclude.txt << EOF
*.log
*.tmp
.cache
.DS_Store
Thumbs.db
EOF
tar czf backup.tar.gz /home/user -X exclude.txt