2007年6月5日星期二

我爱命令行:tar

tar

详见 GNU tar官方文档 。处理tar, tar.gz, tar.bz2, tgz等格式文件,用于备份和打包。

常用命令选项

-c 创建归档文件。
-u 更新文件,如果要添加的文件比tar包中的新或tar包中不存在,则文件被添加。不支持压缩tar包,如tar.bz2等。如过被更新的tar包 不存在,则直接创建。所以如果创建非压缩的tar包,则可以用u选项代替c选项。注意,旧的文件依旧被保存,解压时如果有多个同名文件,默认是最后添加 (参见-t选项)的文件会覆盖先前的文件,不会询问,看前来就象是只有最后添加的文件被解压缩。
-r 添加文件,用法与-u参数相同,区别是不比较文件,只是简单的添加。
--delete 从tar包中删除文件,不支持压缩tar包。
-x 解压缩归档文件。
--occurrence=n 在一个tar包中有多个同名文件时,指定要操作的是第n个。默认是1,这时=n可以省略
-t 列出tar包中的文件。支持压缩tar包。注意文件列表是有次序的,排在最后的说明最后添加。
-v 详细模式。显示处理进程,如正在处理的文件等等。
-f 使用文件而不是stdin/stdout
-p 保留文件的所有外部属性。默认,可以省略。解压缩时以root身份(如sudo)即可恢复文件属性。以普通用户身份解压缩则文件属主变为该用户自己。
-P 保留归档时目录名中的根目录标志/。不建议使用,因为一不小心就会把文件解压到系统目录中,而不是当前目录。此选项默认关闭。
-j 使用bzip2压缩/解压缩tar包
-z 使用gzip压缩/解压缩tar包
-C 解压锁到指定目录。
--exclude 不归档指定的目录。除个别子目录之外,归档某个目录。

示例

打包用户目录,默认已保留所有文件外部属性
tar jcvf foo.tar.bz2 /home/jack
tar zcvf foo.tar.bz2 /home/jack
添加foo到foo.tar,注意不支持foo.tar.gz这样的压缩格式
tar uvf foo.tar /home/jack/foo
解压缩foo.tar.bz2到当前目录,并保留文件外部属性。
sudo tar jxvf foo.tar.bz2
解压缩foo.tar.gz到当前目录,但文件属主被改为当前用户
tar zxvf foo.tar.gz
只解压缩指定的文件,如果有多个同名文件,可以指定解压哪一个。
tar jxvf foo.tar.bz2 foo.txt
tar jxvf foo.tar.bz2 --occurrence=2 foo.txt
备份系统,注意要把备份文件自己放到exclude例外中。
tar jcvf backup.tar.bz2 --exclude=/proc --exclude=/lost+found --exclude=/backup.tar.bz2 --exclude=/mnt --exclude=/sys /
解压缩到根目录,通常用于备份的恢复。
sudo tar jxvf backup.tar.bz2 -C /
显示foo.tar.bz2中的文件及其详细信息(v参数)。
tar tvf foo.tar.bz2
从foo.tar中删除foo/foo2,不支持压缩tar档,注意文件路径(可用tar tf先查看)
tar --delete -f foo.tar foo/foo2
如果有多个同名文件,可以指定要删除哪一个。
tar --delete -f foo.tar --occurrence=2 foo1/foo2.txt

没有评论: