linxu tar命令

linxu  tar命令

#来源于Linux Shell脚本攻略(第二版)

1. 向归档文件中添加文件

有时候,我们可能需要向已存在的归档文件再添加一些文件,这时可以使用追加选项-r。
要向已有的归档文件中添加一个文件:
$ tar -rvf original.tar new_file
创建一个其中包含有文本文件的归档:
$ tar -cf archive.tar hello.txt
用下面的方法列出归档文件中的内容:
$ tar -tf archive.tar
hello.txt
接着向归档文件中再添加另一个文件,并列出归档内容:
$ tar -rf archive.tar world.txt
$ tar -tf archive.tar
hello.txt
world.txt
这个归档文件中现在包含了两个文件。


2. 从归档文件中提取文件或文件夹

下面的命令将归档文件的内容提取到当前目录中:
$ tar -xf archive.tar
选项-x表示提取(exact)。
使用-x时,tar命令将归档文件中的内容提取到当前目录。我们也可以用选项-C来指定需要
将文件提取到哪个目录:
$ tar -xf archive.tar -C /path/to/extraction_directory
这个命令将归档文件的内容提取到指定目录中。它提取的是归档文件中的全部内容。我们可以通
过将文件名指定为命令行参数来提取特定的文件:
$ tar -xvf file.tar file1 file4

上面的命令只提取file1和file4,忽略其他文件。


3. 在tar中使用stdin和stdout

进行归档时,我们可以将stdout指定为输出文件,这样另一个命令就可以通过管道来读取
(作为stdin),然后进行其他处理或提取内容。
当通过安全shell(Secure Shell,SSH)连接传输数据时,这招很管用。例如:
$ tar cvf - files/ | ssh user@example.com "tar xv -C Documents/"
在上面的例子中,对files目录中的内容进行了归档并输出到stdout(由'-'指明)。


4. 拼接两个归档文件

我们可以用 -A选项轻松地合并多个tar文件。
假设我们现在有两个tar文件:file1.tar和file2.tar。可以按照下面的方法将file2.tar的内容合并
到file1.tar中:
$ tar -Af file1.tar file2.tar
查看内容,验证操作是否成功:
$ tar -tvf file1.tar


5. 通过检查时间戳来更新归档文件中的内容

添加选项可以将指定的任意文件加入到归档文件中。如果同名文件已经存在,那么结果就是
在归档文件中包含了两个同名的文件。我们可以用更新选项-u指明:只有比归档文件中的同名文
件更新时才会被添加。
$ tar -tf archive.tar
filea
fileb
filec
上面的命令将列出归档文件中的内容。
仅当filea自上次被加入archive.tar后出现了变动才对其进行追加,可以使用:
$ tar -uf archive.tar filea
如果两个filea的时间戳相同,则什么都不会发生。
可用touch命令修改文件的时间戳,然后再用tar命令:
$ tar -uvvf archive.tar filea
-rw-r--r-- slynux/slynux 0 2010-08-14 17:53 filea

因为时间戳比归档文件中的同名文件更新,因此执行追加操作。验证如下:
$ tar -tf archive.tar
-rw-r--r-- slynux/slynux 0 2010-08-14 17:52 filea
-rw-r--r-- slynux/slynux 0 2010-08-14 17:52 fileb
-rw-r--r-- slynux/slynux 0 2010-08-14 17:52 filec
-rw-r--r-- slynux/slynux 0 2010-08-14 17:53 filea
如你所见,一个新的filea被加入了归档文件中。当从中提取文件时,tar会挑选最新的filea进行
提取。


6. 比较归档文件与文件系统中的内容

有时候需要知道归档文件中的文件与文件系统中的同名文件是否相同。选项-d可以打印出两
者之间的差别:
$ tar -df archive.tar
afile: Mod time differs
afile: Size differs


7. 从归档文件中删除文件

我们可以用 --delete选项从给定的归档文件中删除文件。例如:
$ tar -f archive.tar --delete file1 file2 ..
或者
$ tar --delete --file archive.tar [FILE LIST]
来看另外一个例子:
$ tar -tf archive.tar
filea
fileb
filec
删除filea:
$ tar --delete --file archive.tar filea
$ tar -tf archive.tar
fileb
filec


8. 压缩tar归档文件

tar命令只能用来对文件进行归档,它并不具备压缩功能。出于这个原因,多数用户在使用
归档文件时都会对文件采用某种形式的压缩,这样就能够显著减少文件的体积。归档文件通常被
压缩成下列格式之一:

 file.tar.gz
 file.tar.bz2
 file.tar.lzma
不同的tar选项可以用来指定不同的压缩格式:
 -j指定bunzip2格式;
 -z指定gzip格式;
 --lzma指定lzma格式。
这些格式会在随后专门讲解压缩技术的攻略中讨论。
也可以不明确指定上面那些特定的选项来使用压缩功能。tar能够通过查看输出或输入文件
的扩展名来进行压缩。为了让tar支持根据扩展名自动进行压缩,使用 -a或 --auto-compress
选项:
$ tar acvf archive.tar.gz filea fileb filec
filea
fileb
filec
$ tar tf archive.tar.gz
filea
fileb
filec


9. 从归档中排除部分文件

通过指定模式可以从归档中排除部分文件。用 --exclude [PATTERN]排除匹配通配符样式
的文件。
例如,排除所有的.txt文件:
$ tar -cf arch.tar * --exclude "*.txt"

{样式应该使用双引号来引用,避免shell对其进行扩展。}

也可以将需要排除的文件列表放入文件中,同时配合选项 -X:
$ cat list
filea
fileb
$ tar -cf arch.tar * -X list

这样就无需对filea和fileb进行归档了。


10. 排除版本控制目录

我们通常使用tar归档文件来分发源代码。大多数源代码都是使用版本控制系统进行维护
的,如subversion、Git、mercurial、cvs等。版本控制系统中的代码目录包含用来管理版本的特殊
目录,如.svn或.git。但源代码本身并不需要这些目录,所以不应该将它们包含在源代码的tar归
档文件中。
为了在归档时排除版本控制相关的文件和目录,可以使用tar的 --exclude-vcs选项。例如:
$ tar --exclude-vcs -czvvf source_code.tar.gz eye_of_gnome_svn


11. 打印总字节数

有时候我们需要知道归档了多少字节。用–totals就可以在归档完成之后打印出总归档字节数:
$ tar -cf arc.tar * --exclude "*.txt" --totals
Total bytes written: 20480 (20KiB, 12MiB/s)

posted @ 2020-01-14 17:35  Justtosee  阅读(262)  评论(0编辑  收藏  举报