当前位置: 首页 > 面试题库 >

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

高正初
2023-03-14
问题内容

在备份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


 类似资料:
  • 我在备份shell脚本的部分中有以下命令: 因此,当我解压时,文件被解压在当前目录中,之后我不需要移动被解压的文件,这样子目录结构就被保留了。 在中和web上的其他地方已经有很多关于tar和备份的问题,但大多数问题要求删除整个子目录结构(扁平化),或者只是添加或删除名称中的初始/(我不知道在提取时它到底改变了什么),而不是更多。 在阅读了这里和那里找到的一些解决方案以及手册之后,我尝试了: 但没有

  • 我在/home/user/archived/myFiles中有几个子目录,每个子目录中都有文件,我试图将它们捆绑到一个tar文件中。问题是,它一直绑定完整的目录路径,而不是myFiles文件夹中的所有内容。 当我解压缩文件时,我只希望里面所有捆绑的子目录/文件都出现在我提取文件的目录中,而不必通过一系列创建的文件夹。 相反,当我当前解压缩文件时,我得到一个“主页”文件夹,我必须通过/主页/用户/存

  • 问题内容: 到现在为止,我们可以使用以下代码片段获取文件的绝对路径,以便稍后作为readStream打开: 从流星0.6.5开始,基本路径指向 还有Assets API,但该API不能给我们返回路径,而只能返回读取的文档。但是我们需要一个流来处理一些更大的数据文件吗? 问题答案: 从1.3版开始,已记录的功能 似乎是可靠地获得项目路径的最佳方法。 流星Github

  • 本文向大家介绍获取Java中目录或文件的绝对路径,包括了获取Java中目录或文件的绝对路径的使用技巧和注意事项,需要的朋友参考一下 方法java.io.File.getAbsolutePath()用于获取字符串形式的文件或目录的绝对路径名。此方法不需要任何参数。 演示此的程序如下所示- 示例 上面程序的输出如下- 输出结果 现在让我们了解上面的程序。 使用方法java.io.File.getAbs

  • 我有最新的Jenkins,它是Swarm plugin client jar(2.0)。 我下载了swarm-client jar并运行以下命令来创建Slave:(注意::我使用user Anonymous连接到Jenkins master,而不需要用户名/密码,并且通过创建一个具有Swarm.*模式的新角色,在全局角色中提供了create Slave权限,并在slaver Roles下的Slav

  • 问题内容: 我有此功能返回: } 但是我想做的是搜索文件/文件夹并返回它的路径,我该怎么做?你有这样的功能,或者可以给我一些技巧吗? 问题答案: 尝试结合使用RecursiveIteratorIterator和RecursiveDirectoryIterator