当前位置: 首页 > 知识库问答 >
问题:

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
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html

因此,当我解压时,文件被解压在当前目录中,之后我不需要移动被解压的文件,这样子目录结构就被保留了。

stackoverflow中和web上的其他地方已经有很多关于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的工作原理?

共有1个答案

潘嘉颖
2023-03-14
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文件夹中的所有内容。 当我解压缩文件时,我只希望里面所有捆绑的子目录/文件都出现在我提取文件的目录中,而不必通过一系列创建的文件夹。 相反,当我当前解压缩文件时,我得到一个“主页”文件夹,我必须通过/主页/用户/存

  • 我有一个角应用程序使用Firebase存储存储用户上传的照片文件。在用户上传一个文件之后,我调用getDownloadURL()(返回Observable)以获得完整的公共URL路径。我希望将URL字符串存储在Firestore数据库中,以便将其绑定到img html元素src属性,以便在web页面上显示。这将使我不必调用存储API来一个接一个地异步获取每个图像URL。 这个URL在查询字符串中包

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

  • 由于某些不寻常的原因,当我使用Java Netbean的时,文件会写入以下目录: C:\Users\myname\AppData\Roaming\NetBeans\7.2\config\GF3\domain1 而不是我的工作目录,它在桌面上。 我使用此代码检查我的用户目录,它返回以下内容: 系统出来println(System.getProperty(“user.dir”) INFO:C:\Use

  • 问题内容: 我在两个不同的目录中有两个文件,一个是,另一个是。我使用以下代码压缩它们: 我打开zip文件后,我创造,我有一个在它的文件夹,然后有两个子文件夹在里面,和,则PDF文件。我不知道如何仅包含两个pdf文件,而不是将完整路径压缩到zip存档中。我希望我的问题很清楚,请帮忙。谢谢。 问题答案: zipfile write()方法支持一个额外的参数(arcname),该参数是要存储在zip文件