最佳答案
我有以下命令在备份shell脚本的一部分:
tar -cjf site1.bz2 /var/www/site1/
当我列出存档的内容时,我得到:
tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html
但是我想从存档中的目录和文件名中删除/var/www/site1
部分,以简化提取和避免无用的常量目录结构。永远不知道,万一我将提取备份的网站在一个地方,网站数据不存储在/var/www
下。
对于上面的例子,我希望有:
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
当我提取的时候,文件是在当前目录下提取的之后我不需要移动提取的文件,所以子目录结构是保留的。
在stackoverflow
和web上的其他地方已经有很多关于tar和备份的问题,但大多数问题都要求删除整个子目录结构(扁平化),或者只是在名称中添加或删除首字母/(我不知道提取时它到底改变了什么),但没有更多。
在阅读了这里和那里找到的一些解决方案以及手册之后,我尝试了:
tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/
但没有一个是我想要的。有些不做任何事,有些不再归档子目录。
它在由Cron启动的备份shell脚本中,所以我不知道,哪个用户运行它,路径和当前目录是什么,所以总是写绝对路径是必要的,并且宁愿不改变当前目录,以避免在脚本中进一步破坏(因为它不仅备份网站,还备份数据库,然后将所有这些发送到FTP等)。
如何做到这一点?
我是否误解了选项-C的工作原理?