tar: Removing leading `/' from member names
或是中文:tar: 从成员名中删除开头的“/”
首先,这其实不是一个错误,虽然是输出到了stderr里,但其实是系统的一个提示,如所述,删掉了开头的/符号,亦即,去掉了绝对路径的意思
出现此条告警,是因为指定打包目录时,给的是绝对路径,比如:
# tar zcvf name.tar.gz /home/test/test_folder
tar处理时,默认是将/home/test/test_folder的开头的"/"删掉,变为home/test/test_folder这种格式,这样,稍后要untar的时候,不至于将untar出来的文件直接按绝对路径覆盖了原始的文件,在很多情况下,这并非我们的原意,我们会更倾向于只是把备份文件解到一个另外的文件目录下,查看对比。所以,tar的这种默认行为其实是更合理的
也所以说,网上很多文章对此告警给出的解决方法用p选项强制tar不要删除开头的"/",其实在大多数情况下,并不是一个好的解决方法
# tar zcvfp name.tar.gz /home/test/test_folder
虽然用p选项的确不报警了,但是如上所述,消除报警一时爽,将来解压的时候很可能会灾难的
tar自己的解决方法,就是将绝对路径改为相对路径,比如在当前目录下
# cd /home/test
# tar zcvf name.tar.gz test_folder
另一种方法,可以使用-C中转一下,比如
# tar zcvf name.tar.gz -C / home/test/test_folder
-C /的意思是说指定目录到根目录/,然后把后面的绝对路径开始的"/"去掉,这样,也能达到既使用绝对路径,又不会有报警的目的
但是shell编程的时候,经常会使用变量,比如
# target=/home/test/test_folder
# tar zcvf name.tar.gz $target
这样的话,除非定义变量的时候规避"/",否则确实没有啥好办法防止报警。但如开头所述,这其实是一条info而非error,所以个人觉得,宁可报警,也不要用p选项的好
首先,这其实不是一个错误,虽然是输出到了stderr里,但其实是系统的一个提示,如所述,删掉了开头的/符号,亦即,去掉了绝对路径的意思
出现此条告警,是因为指定打包目录时,给的是绝对路径,比如:
# tar zcvf name.tar.gz /home/test/test_folder
tar处理时,默认是将/home/test/test_folder的开头的"/"删掉,变为home/test/test_folder这种格式,这样,稍后要untar的时候,不至于将untar出来的文件直接按绝对路径覆盖了原始的文件,在很多情况下,这并非我们的原意,我们会更倾向于只是把备份文件解到一个另外的文件目录下,查看对比。所以,tar的这种默认行为其实是更合理的
也所以说,网上很多文章对此告警给出的解决方法用p选项强制tar不要删除开头的"/",其实在大多数情况下,并不是一个好的解决方法
# tar zcvfp name.tar.gz /home/test/test_folder
虽然用p选项的确不报警了,但是如上所述,消除报警一时爽,将来解压的时候很可能会灾难的
tar自己的解决方法,就是将绝对路径改为相对路径,比如在当前目录下
# cd /home/test
# tar zcvf name.tar.gz test_folder
另一种方法,可以使用-C中转一下,比如
# tar zcvf name.tar.gz -C / home/test/test_folder
-C /的意思是说指定目录到根目录/,然后把后面的绝对路径开始的"/"去掉,这样,也能达到既使用绝对路径,又不会有报警的目的
但是shell编程的时候,经常会使用变量,比如
# target=/home/test/test_folder
# tar zcvf name.tar.gz $target
这样的话,除非定义变量的时候规避"/",否则确实没有啥好办法防止报警。但如开头所述,这其实是一条info而非error,所以个人觉得,宁可报警,也不要用p选项的好
评论
发表评论