【问题标题】:How to create a tar archive from an absolute path and package files as if they were relative?如何从绝对路径和包文件创建 tar 存档,就好像它们是相对的一样?
【发布时间】:2018-07-14 06:27:53
【问题描述】:

在 Linux 上,我试图从不同的目录创建一个 .tar.gz 存档,也就是说,我有一个将从不同目录执行的 bash 脚本。该脚本将打包文件夹,我将给文件夹的绝对目录说/home/user1/Documents/folder1但是当它打包tar文件时,它会将整个绝对目录放在存档中,而我只想要来自folder1的相对目录。

例如:

tar czf /home/user1/Documents/folder1.tar.gz /home/user1/Documents/folder1

这将创建一个存档,但第一个文件夹将是主文件夹,然后在该文档中的 user1 和该文件夹 1 中,当然没有来自其他分支的其他子文件夹。

控制台也给出了这个错误:

tar: Removing leading `/' from member names

我希望它被打包,就好像我会从同一个文件夹中执行命令一样,所以存档中唯一的文件夹应该是 folder1,并且在里面它是自己的子文件夹。

所以里面的存档应该看起来就像我会从文件夹 1 所在的同一目录中执行这段代码一样:

tar czf folder1.tar.gz folder1

【问题讨论】:

    标签: linux path directory tar subdirectory


    【解决方案1】:

    您可以在执行任何操作之前使用-C 选项更改目录:

    tar czf /home/user1/Documents/folder1.tar.gz -C /home/user1/Documents folder1
    

    现在,您的存档内容将如下所示:

    $ tar tf /home/user1/Documents/folder1.tar.gz 
    folder1/
    folder1/file1
    

    顺便说一句,您收到的消息不是错误。它是 tar 告诉您它使存档中的路径相对以避免覆盖文件,这在使用绝对路径解压缩存档时很容易发生。您可以使用 -P 关闭前导斜杠删除,但您通常不希望这样做。

    【讨论】:

    • 对我来说效果很好,与@Cyrus 写的相比,使用这种方法有什么缺点吗?
    • @Markus84612 我唯一能想到的就是可移植性——不是每个 tar 都可能支持-C? GNU tar 可以,macOS tar 可以,BSD tar 可以。
    • 它对我有用,所以答案令人满意。
    猜你喜欢
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2012-02-21
    • 2016-09-28
    • 1970-01-01
    相关资源
    最近更新 更多