> 文章列表 > 使用 tar 归档

使用 tar 归档

使用 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