对目录进行Tar,但不要在存档中存储完整的绝对路径

我在备份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,以简化提取并避免无用的常量目录结构。永远不知道,以防我在一个web数据未存储在/var/www下的地方提取备份网站

对于上述示例,我希望:

tar-tf site1.bz2
样式表
index.html
页面2.html
页面3.html
图像/img1.png
图像/img2.png
subdir/index.html

所以,当我提取时,文件在当前目录中提取,之后我不需要移动提取的文件,这样子目录结构就保留了

stackoverflow和web上的其他地方,已经有很多关于tar和备份的问题,但是大多数问题都要求删除整个子目录结构(扁平化),或者只是在名称中添加或删除首字母/而已(我不知道提取时它会发生什么变化),但仅此而已

在阅读了这里和那里的一些解决方案以及手册后,我尝试:

tar-cjf site1.bz2-C/var/www/site1/
tar-cjf站点1.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的工作原理

tar-cjf site1.tar.bz2-C/var/www/site1。

在上面的示例中,tar在执行其操作之前将更改为目录/var/www/site1,因为给出了选项-C/var/www/site1

人工焦油

其他选项
-C、 --目录目录目录
更改为目录目录目录

发表评论