使用 tar 归档
tar 命令可以归档文件。它最初是设计用来将数据存储在磁带上,因此其名字也来源于Tape
ARchive。 tar 可以将多个文件和文件夹打包为单个文件,同时还能保留所有的文件属性,如所
有者、权限等。由 tar 创建的文件通常称为tarball。
1. 用 tar 创建归档文件:
tar -cf output.tar [SOURCES]
- 选项 -c 表示创建新的归档文件。
- 选项 -f 表示归档文件名,该选项后面必须跟一个文件名称:
2. 列出归档文件中所包含的文件
选项 -t 可以列出归档文件中所包含的文件:
tar -tf archive.tar
3. 输出中加入更多的细节信息
- 选项 -v 或 -vv 参数可以在命令输出中加入更多的细节信息。
这个特性叫作“冗长模式(v,verbose)”或“非常冗长模式(vv,very verbose)”。
注意:文件名必须紧跟在 -f 之后出现,而且 -f 应该是选项中的最后一个。假如你
希望使用冗长模式,应该像这样写:
tar -cvf output.tar file1 file2 file3 folder1 ..
tar 命令可以接受一组文件名或是通配符(如 *.txt ),以此指定需要进行归档的源文件。命
令执行完毕后,所有的源文件都会被归入指定的归档文件中。
4. 向归档文件中追加文件
-
选项 -r 可以将新文件追加到已有的归档文件末尾
tar -rvf original.tar new_file
5. 从归档文件中提取文件或目录
- 选项 -x 可以将归档文件的内容提取到当前目录
tar -xf archive.tar
使用 -x 时, tar 命令将归档文件中的内容提取到当前目录。我们也可以用选项 -C 来指定将文
件提取到哪个目录:
tar -xf archive.tar -C /path/to/extraction_directory
该命令将归档文件的内容提取到指定目录中。它提取的是归档文件中的全部内容。我们可以通过
将文件名作为命令行参数来提取特定的文件:
tar -xvf file.tar file1 file4
上面的命令只提取file1和file4,忽略其他文件。
6. 在tar中使用stdin和stdout
在归档时,我们可以将 stdout 指定为输出文件,这样另一个命令就可以通过管道来读取(作
为 stdin )并进行其他处理。 当通过安全shell(Secure Shell,SSH)传输数据时,这招很管用。例如:
tar cvf - files/ | ssh user@example.com "tar xv -C Documents/"
7. 拼接两个归档文件
我们可以用选项 -A 合并多个 tar 文件。假设我们现在有两个 tar 文件:file1.tar和file2.tar。下面的命令可以将file2.tar的内容合并到file1.tar中:
tar -Af file1.tar file2.tar
8. 通过检查时间戳来更新归档文件中的内容
追加选项( -r )可以将指定的任意文件加入到归档文件中。如果同名文件已经存在,那么归
档文件中就会包含两个名字一样的文件。我们可以用更新选项 -u 指明:只添加比归档文件中的同
名文件更新(newer)的文件。
tar -uf archive.tar filea
仅当filea自上次被加入archive.tar后出现了改动才对其执行追加(变更)操作。
9. 比较归档文件与文件系统中的内容
选项 -d 可以将归档中的文件与文件系统中的文件作比较。这个功能能够用来确定是否需要创建新的归档文件。
tar -df archive.tar
10. 从归档中删除文件
可以用 --delete 选项从归档中删除文件
tar -f archive.tar --delete file1 file2 ..
或者:
tar --delete --file archive.tar [FILE LIST]
11. 压缩tar归档文件
tar 命令默认只归档文件,并不对其进行压缩。不过 tar 支持用于压缩的相关选项。压缩能
够显著减少文件的体积。归档文件通常被压缩成下列格式之一。
- gzip格式: file.tar.gz 或 file.tgz 。
- bzip2格式: file.tar.bz2 。
- Lempel-Ziv-Markov格式: file.tar.lzma 。
不同的 tar 选项可以用来指定不同的压缩格式:
- -j 指定bunzip2格式;
- -z 指定gzip格式;
- --lzma 指定lzma格式。
不明确指定上面那些特定的选项也可以使用压缩功能。 tar 能够基于输出或输入文件的扩
展名来进行压缩。为了让 tar 支持根据扩展名自动选择压缩算法,使用 -a 或 --auto-compress
选项:
tar -acvf archive.tar.gz filea fileb filec
tar -tf archive.tar.gz
12. 在归档过程中排除部分文件
选项 --exclude [PATTERN] 可以将匹配通配符模式的文件排除在归档过程之外。 例如,排除所有的.txt文件:
tar -cf arch.tar * --exclude "*.txt"
注意: 模式应该使用双引号来引用,避免shell对其进行扩展。
也可以将需要排除的文件列表放入文件中,同时配合选项 -X :
$ cat list
filea
fileb $ tar -cf arch.tar * -X list
这样就把filea和fileb排除了。
13. 排除版本控制目录
tar 文件的用处之一是用来分发源代码。很多源代码都是使用版本控制系统进行维护的,如
subversion、Git、mercurial、CVS。版本控制系统中的代码目录通常包含一些特殊目录,如.svn或.git。这些目录由版本控制系统负责管理,对于开发者之外的用户并没有什么用。
因此无需将其包含在分发给用户的 tar 文件内。
- tar 的选项 --exclude-vcs 可以在归档时排除版本控制相关的文件和目录。例如:
tar --exclude-vcs -czvvf source_code.tar.gz eye_of_gnome_svn
14. 打印总字节数
- 选项 -totals 可以打印出归档的总字节数。
注意,这是实际数据的字节数。如果使用了压缩
选项,文件大小会小于总的归档字节数:
tar -cf arc.tar * --exclude "*.txt" --totals