我在备份脚本的一部分中有以下命令:
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
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
因此,当我解压缩文件时,文件将被解压缩到当前目录中,我不需要在之后移动解压缩文件,并且子目录结构得以保留。
关于tar和备份,stackoverflow
及其他网站已经有很多相关问题,但它们大多数要求删除整个子目录结构(平铺),或者仅添加或删除名称中的初始/(我不知道在解压缩时会发生什么变化),但没有更多的信息。
在阅读了一些在这里和其他地方找到的解决方案以及手册之后,我尝试了以下方法:
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的工作原理?
tar cjf site1.bz2 --transform "s/^\.\//$targetbase/" -C /var/www/site1 .
- Daniele Cruciani