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

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.tar.bz2 -C /var/www/site1 .

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

来自man tar

OTHER OPTIONS

-C, --directory DIR

change to directory DIR

以上是 Tar目录,但不要在归档中存储完整的绝对路径 的全部内容, 来源链接: utcz.com/qa/420270.html

回到顶部