﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-TSH,SSH开发-随笔分类-Linux</title><link>http://www.blogjava.net/yc1354/category/25579.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 04 Sep 2007 10:36:07 GMT</lastBuildDate><pubDate>Tue, 04 Sep 2007 10:36:07 GMT</pubDate><ttl>60</ttl><item><title>Linux tar 命令</title><link>http://www.blogjava.net/yc1354/archive/2007/09/04/142689.html</link><dc:creator>赵永超</dc:creator><author>赵永超</author><pubDate>Tue, 04 Sep 2007 09:17:00 GMT</pubDate><guid>http://www.blogjava.net/yc1354/archive/2007/09/04/142689.html</guid><wfw:comment>http://www.blogjava.net/yc1354/comments/142689.html</wfw:comment><comments>http://www.blogjava.net/yc1354/archive/2007/09/04/142689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yc1354/comments/commentRss/142689.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yc1354/services/trackbacks/142689.html</trackback:ping><description><![CDATA[Windows下最常见的压缩文件只有两种，.zip和.rar。可是Linux就不同了，有.Z、bz2、.gz、.tar、.tar.gz等众多的压 缩文件名，它们分别对应了各种压缩打包命令。要了解这些压缩打包命令的使用，首先要弄清两个概念：打包和压缩。打包是指将一大堆文件或目录什么的变成一个 总的文件，压缩则是将一个大的文件通过一些压缩算法变成一个小文件。Linux中的很多压缩命令只能针对一个文件进行压缩，当要压缩一大堆文件时，就得先 借助打包命令将这一大堆文件先打成一个包，然后再用压缩命令进行压缩。因此打包命令在Linux的应用中具有很重要的作用。
<p>Linux下最常用的打包命令就是tar，使用tar命令打包后，就可以用其它的命令来进行压缩了。tar命令的使用方法如下：</p>
<p>tar [-cxtzjvfpPN] 文件与目录<br />
参数说明：<br />
-c ：建立一个打包文件；<br />
-x ：解开一个打包文件；<br />
-t ：查看 tar包里面的文件；<br />
（特别注意，在选择参数时，c/x/t仅能存在一个，不可同时存在，因为不可能同时压缩与解压缩。）<br />
-z ：打包后用gzip压缩，生成.tar.gz文件；<br />
-j ：打包后用zip2压缩，生成.tar.bz2文件；<br />
-v ：压缩的过程中显示文件；<br />
-f ：使用文件名，请留意，在f之后要立即接文件名，不要再加其它参数；<br />
-p ：保持原文件的属性；<br />
-P ：使用绝对路径来压缩；<br />
-N ：设定日期(yyyy/mm/dd)，比后面接的日期还要新的文件才会被打包进新建的文件中；<br />
--exclude FILE：在打包的过程中，不要将FILE打包。</p>
<p>举几个例子：</p>
<p>例一：将整个/etc目录下的文件全部打包成为/tmp/etc.tar<br />
tar -cvf /tmp/etc.tar /etc&nbsp;&nbsp;#仅打包，不压缩<br />
tar -zcvf /tmp/etc.tar.gz /etc&nbsp;&nbsp;#打包后，以gzip压缩<br />
tar -jcvf /tmp/etc.tar.bz2 /etc&nbsp;&nbsp;#打包后，以bzip2压缩</p>
<p>例二：查阅上述/tmp/etc.tar.gz文件内有哪些文件<br />
tar -ztvf /tmp/etc.tar.gz</p>
<p>例三：将/tmp/etc.tar.gz文件解压缩到/usr/local/src下<br />
cd /usr/local/src&nbsp;&nbsp;&nbsp;#先将工作目录变换到/usr/local/src下<br />
tar -zxvf /tmp/etc.tar.gz<br />
&nbsp; <br />
例四：只将/tmp/etc.tar.gz内的etc/passwd解压到/tmp下<br />
cd /tmp<br />
tar -zxvf /tmp/etc.tar.gz etc/passwd</p>
<p>例五：将/etc内的所有文件备份下来，并且保存其权限！<br />
tar -zxvpf /tmp/etc.tar.gz /etc</p>
<p>例六：在/home当中，比2005/06/01新的文件才备份<br />
tar -N '2005/06/01' -zcvf home.tar.gz /home</p>
<p>例七：备份/home、/etc，但不要/home/dmtsai<br />
tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc</p>
<p>例八：将/etc打包后直接解开在/tmp底下，而不产生文件！<br />
cd /tmp<br />
tar -cvf - /etc | tar -xvf -</p>
<br />
<p>&nbsp;</p>
<p>现在有一个需求，不知道该如何才能实现<br />
压缩： tar czvf /data/backup/test.tar.gz /data/a/b/directory<br />
解压：<br />
cd /data/test<br />
tar xzvf /data/backup/test.tar.gz<br />
<br />
问题是，解压后的文件，在/data/test/data/a/b/directory里面<br />
能否压缩时只保留directory以下的所有目录，以directory作为/，而不是/data/a/b/directory？<br />
<br />
问题已经解决，找到了GNU tar的官方资料<br />
http://www.delorie.com/gnu/docs/tar/tar_98.html<br />
<br />
这样写就可以解决了<br />
tar czvf /data/backup/test.tar.gz /data/a/b/directory<br />
改成<br />
tar czvf /data/backup/test.tar.gz -C /data/a/b(空格)directory</p>
<p>&nbsp;<br />
-C是临时切换工作目录，-P是绝对路径，在这里只用到-C参数就行了</p>
<img src ="http://www.blogjava.net/yc1354/aggbug/142689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yc1354/" target="_blank">赵永超</a> 2007-09-04 17:17 <a href="http://www.blogjava.net/yc1354/archive/2007/09/04/142689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>