gpt4 book ai didi

linux - tar 目录,但不要在存档中存储完整的绝对路径

转载 作者:IT老高 更新时间:2023-10-28 12:19:03 26 4
gpt4 key购买 nike

我在备份 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 的工作原理?

最佳答案

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

关于linux - tar 目录,但不要在存档中存储完整的绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18681595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com