最近学压缩命令,在用绝对路径打包时出现了这样的错误:
tar -cvf test.tar /think/test
>>>tar:从成员名中删除开头的"/"
当时我是在/home路径下,这个问题让我着实很头疼,因为有时候不得不要用绝对路径来打包。但是当我查看/home下的文件时,发现test还是打包成功了。
后来我去查资料,发现这压根就不是什么错误,只是Linux一个善意的提醒,如果不想看到他,在打包时加上参数-p就可以了。但是为什么Linux要设置这样一个提醒呢?现在我们来看看将test.tar解压会怎样:
首先看看test下有哪些文件:
ls -R /think/test
>>>.:
a
./a:
1.txt 2.txt
打包后test为:
tar -cvf test.tar /think/test
>>>tar:从成员名中删除开头的"/"
解压test.tar
tar -tf test.tar
>>>/think/test/a/1,txt
>>>/think/test/a/2.txt
tar -xf test.tar
ls
>>>think ...(其他文件)
ls -R think
>>>think:
test
think/test:
a
think/test/a:
1.txt 2.txt
也就是说,用绝对路径打包,解压时也会解压成绝对路径,这样有可能会造成直接把根目录覆盖了,或者在当前路径下解压时文件名以/开头。因此系统在压缩时会将/去掉,这也就是为什么系统会提示去掉/的原因。
那么怎样才能避免不用绝对路径解压呢,除了直接在当前目录下进行压缩操作外,还可以在压缩时切换目录:
tar -cvf test.tar -C /think test
tar tf teat.tar
>>>test/a/1.txt
>>>test/a/2.txt
这里的-C就是在压缩时切换到/think的test目录,压缩之后的文件还是在当前目录。