我在备份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 和网络上的其他地方已经有很多关于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的工作原理吗?