我在备份 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
因此,当我提取时,文件将被提取到当前目录中,之后我不需要移动提取的文件,因此子目录结构被保留。
已经有很多关于 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 的工作原理?