tar 命令

6.8.1 变换工作目录
在文件列表、命令行、或者使用了--files-from=file-of-names (-T file-of-names)命令的特定文件中间,若要变換工作目录,可以使用-directory=directory (-C directory),这将会在那些列表之后切換工作目录。

--directory=directory
-C directory
在命令行中间变换工作目录
例如:

 
 
tar -c -f jams.tar grape prune -C food cherry

这个命令将会把当前文件夹下的“grape”、“prune”目录打包到jams.tar文件里,紧接着还有food目录下的cherry文件。在你想要把分散在各地方的文件打包起来的时候,这个参数将非常有用。
需要注意的是,文件“cheery”被压缩进包里会精确地命名为“cheery”,而不是“food/cherry”。于是这个压缩包将在同一个目录下包含三个文件;若使用tar命令将这个压缩包解压,这三个文件将会被解压到同一个目录。
再对比一下下面这条命令:

 
 
tar -c -f jams.tar grape prune -C food red /cherry

它解压出来会是这样的结构:

 
 
grape prune red/cherry

※原文没有的,我就补充一下:
如果你想把food/red/cherry这个文件也放在压缩包的根目录,就这样写:

 
 
tar -c -f jams.tar grape prune -C food / red cherry

你可以使用“--directory”参数让文件从它原来的文件夹里独立出来。下面这个命令把“/etc/passwd”、“/etc/hosts”和“/lib/libc”压缩进了一个叫“foo.tar”的文件里。

 
 
tar -c -f foo.tar -C /etc passwd hosts -C /lib libc.a

这些文件会在压缩包里直接地显示它们在命令行中的样子:“passwd”,“hosts”和“libc.a”。它们不会和原来的文件夹结构有任何关联。
注意,若“--directory”参数指定了一个有结构的文件名,它将会被从原来的文件夹结构转变成以当前文件夹为准的结构。

※(补充)例如:

 
 
tar -zcvf myfile.tar.gz myfile1 -C myfol music /myfile2

原来的文件夹结构为myfol/music/myfile2
因为-C参数指定的文件名是有结构的“music/myfile2”,它转变成以当前文件夹为准的结构也就是从“myfol/music/myfile2”-->“music/myfile2”
在这个压缩包里的文件是这样的:
myfile1
music/myfile2

 

 

tar命令的相对路径和绝对路径问题

 

在使用tar打包网站数据的时候在结果处出现了一句

 
 
tar: Removing leading `/ ' from member names

上网查了一下原来是因为打包时候使用的是绝对路径,系统自动帮我们转换成了相对路径。
若一个压缩包以绝对路径打包的时候,不管你在哪个目录下面解压,它都是被解压到原来备份时的目录下。比如你用绝对路径打包/home/wwwroot/mysite,不管你把这个压缩包在哪个目录下解压,它都是被解压到/home/wwwroot/mysite这个目录下。

如何使用绝对路径打包呢?只需要加上参数P就可以了。
比如:

 
 
tar -zcvPf myfile.tar.gz /home /wwwroot /mysite

不过不推荐用这种方式打包文件,它只有在两台相同的机器之间传送数据才需要这样做。

我们在开头所讲的那个压缩包,我打包时使用的命令是:

 
 
tar -zcvf myfile.tar.gz /home /wwwroot /mysite

系统会把home、wwwroot这些目录也打包进去,不管我们解压在哪里它都是以/home/wwwroot/mysite这个结构显示的。
那如何把只把mysite解压到当前目录下呢?
这就需要变換工作目录。请参考前一篇博客文章:【翻译】Linux变換工作目录
解压时加上C参数,把工作目录设置为系统根目录:

 
 
tar -zxvf myfile.tar.gz -C /

不过个人认为这样做就和绝对路径没什么两样。我们需要在打包的时候只把mysite这个文件夹打包进去。
压缩时加上C参数,就可以只把mysite文件夹打包:

 
 
tar -zcvf myfile.tar.gz -C /home /wwwroot mysite

这样一来我们就可以在任何目录下只把mysite解压出来了。

 

 

以下是自己实验的命令(为了明确使用了/root 和/home/zero目录),用text文件

cd      home/zero

tar      -cvf      /root/text.tar      text                        //生成的tar包中不包含目录,解压后只有当前文件text

cd      /root

tar     -cvf       text.tar       /home/zero/text          //生成的tar包中包含目录home/zero/text(相对路径),解压后在当前目录中生存home/zero/text

tar     -cvf       text.tar       home/zero/text           // 同上一条命令,只是不生成警告:   “”“”“ tar: 从成员名中删除开头的“/”       ”“”“”

tar    -cvf        text.tar      -C       /home/zero     text         //生成的tar包中不包含目录,解压后只有当前文件text(-C命令的作用)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值