在 Linux/Unix 平台, tar
命令式主要的归档工具,了解各种 tar
命令的选项将帮助你掌握 Liunx/Unix 平台下归档文件操作。
在这篇文章中,我们会回顾一些 tar
命令的示例,包括:如何创建 tar 压缩包(使用 gzip
bzip
压缩)、释放一个单独的文件或者目录、查看 tar
归档内容、验证归档文件完整性、对比归档文件与文件系统的差异以及创建归档文件估算归档文件大小等等。
1. 使用 tar
命令创建归档文件
使用选项 cvf
创建未压缩的归档文件
下面的命令是最基础的归档创建命令:
$ tar cvf archive_name.tar dirname/
其中: * c — 创建新的档案文件。如果用户想 备份 一个目录或是一些文件,就要选择这个选项。
- v — 详细报告 tar 处理的文件信息。如无此选项, tar 不报告文件信息。
- f — 使用档案文件或设备,这个选项通常是必选的。
使用选项 cvzf
创建 gzip 创建的归档文件
上面的使用的 cvf
选项,不会对归档执行任何压缩操作,要对归档文件使用 gzip 压缩,可以增加 z
选项,参考下例:
$ tar cvzf archive_name.tar.gz dirname/
- z — 用 gzip 来压缩 / 解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。
注 : .tgz
和 .tar.gz
扩展名 是相同。
注 :我个人比较习惯在创建或解压归档文件时保持 cvf
(或 tvf
或 xvf
)选项在所有选项的前面,这样比较容易记忆。比如: cvf
用来创建归档, cvfz
用来创建 gzip 压缩的归档, cvfj
用来创建 bzip2 压缩的归档。
使用选项 cvjf
创建 bzip2 压缩的归档
$ tar cvfj archive_name.tar.bz2 dirname/
- j — 代表使用‘ bzip2 ’程序进行 文件压缩
比较 gzip 和 bzip2 : bzip2 相对于 gzip 需要更多的时间进行压缩和解压缩工作, bzip2 压缩包 大小要小于 gzip 压缩包。
注 : .tbz
和 .tar.bz2
是相同的
2. 使用 tar
命令释放归档文件
使用 xvf
选项释放 *.tar
$ tar xvf archive_name.tar
- x — 从档案文件中释放文件。
使用 xvzf
释放 gzip 压缩的归档文件
$ tar xvfz archive_name.tar.gz
使用 xvjf
释放 bzip2 压缩的归档文件
$ tar xvfj archive_name.tar.bz2
注 :上面所有选项中 v
是可选的,这个 U 型安详会列出当前处理的文件
3. 使用 tar
命令列出归档内容
使用 tvf
选项列出归档内容(不释放归档)
$ tar tvf archive_name.tar
使用 tvzf
命令列出归档内容(不释放归档)
$ tar tvfz archive_name.tar.gz
使用 tvjf
命令列出归档内容(不释放归档)
$ tar tvfj archive_name.tar.bz2
4. 使用 less
命令列出归档文件内容
当归档 中文 件数量过多时,你可以将 tar
命令的输出重定向到 less
命令。不过,你也可以直接使用 less
命令来查看归档内容,可以参考: Less 的终极能力 — 使用 less 打开和查看 10 种类型的文件
5. 从 tar,tar.gz,tar.gz2 文件中释放单个文件
可以在 tar xvf
命令后指定 文件名 来释放单个文件,参考下面命令:
$ tar xvf archive_file.tar /path/to/file
根据归档的压缩方式( bzip2 或 gzip )指定相应的 j
或 z
选项从压缩的归档文件中释放单个文件:
$ tar xvfz archive_file.tar.gz /path/to/file $ tar xvfj archive_file.tar.bz2 /path/to/file
6. 从 tar,tar.gz,tar.gz2 文件中释放单个目录
可以在 tar xvf
命令后指定路径名来释放单个目录(以及子目录和文件),参考下面命令:
$ tar xvf archive_file.tar /path/to/dir/
要释放多个目录,可以在 tar xvf
逐个列出目录路径,用空格分隔:
$ tar xvf archive_file.tar /path/to/dir1/ /path/to/dir2/
根据归档的压缩方式( bzip2 或 gzip )指定相应的 j
或 z
选项从压缩的归档文件中释放单个文件:
$ tar xvfz archive_file.tar.gz /path/to/dir/ $ tar xvfj archive_file.tar.bz2 /path/to/dir/
7. 使用正则表达式从 tar,tar.gz,tar.gz2 文件中释放多个文件
可以使用正则表达式按照一定的模式从归档中释放文件,比如下面命令会释放归档中所有以 .pl
为后缀的文件:
$ tar xvf archive_file.tar --wildcards '*.pl'
- –wildcards *.pl — 匹配所有以 pl 为后缀名文件
8 使用 -r
选项增加文件或目录到归档中
可以使用下面命令向已存在的归档文件中增加新的文件:
$ tar rvf archive_name.tar newfile
新文件会被增加到 ‘archive_name.tar’ 中,增加目录页差不多:
$ tar rvf archive_name.tar newdir/
注意 :不能向已压缩的归档中增加文件或目录,如果你尝试这么多你会得到一个错误:
$ tar rvfz archive_name.tgz newfile tar: Cannot update compressed archives Try `tar --help' or `tar --usage' for more information.
9. 使用 -W
选项验证归档
作为归档创建的一部分功能,你可以使用 -W
选项验证归档文件:
$ tar cvfW file_name.tar dir/
如果你计划从归档或文件系统中删除一个文件或目录,你可能希望先验证归档文件,参考下面命令:
$ tar tvfW file_name.tar Verify 1/file1 1/file1: Mod time differs 1/file1: Size differs Verify 1/file2 Verify 1/file3
如果每行输出以 Verify
开头并且没有任何差异,那么文件或目录是没有问题的,否则,你需要根据提示查一下问题了。
注意 :不能对压缩的( .tar.gz, .tar.bz2 )归档进行验证。
可以比较归档和原始目录的差异,归档可以是压缩的或未压缩的,比较的结果输出和上面例子中一致,参考下例:
$ tar dfz file_name.tgz
以及:
$ tar dfj file_name.tar.bz2
10. 估算归档文件大小
下面的命令可以在执行归档前估算归档文件大小( kb ):
$ tar -cf - /directory/to/archive/ | wc -c 20480
同样也可以估算压缩后文件大小( kb ):
$ tar -czf - /directory/to/archive/ | wc -c 508 $ tar -cjf - /directory/to/archive/ | wc -c 428