【问题标题】:tar without retaining the directory structuretar 不保留目录结构
【发布时间】:2014-01-25 09:08:15
【问题描述】:

我想在不保留目录结构的情况下 tar 一个目录,例如我是这样 tar 的

shell_exec('tar czf '. __DIR__ .'/tmp/'.$entry.'.tar.gz /home/minecraft/multicraft/servers/'.$entry);

这可以正常工作,但是当我打开 .tar.gz 时,它会像这样显示

我不想只保留没有目录结构的文件夹内容的目录结构。就像,.tar.gz 包含 /home/minecraft/multicraft/servers/server1 我只想在 .tar 中只有目录 server1 的内容.gz

server1 的内容:

如果有人能在这方面提供任何帮助,将不胜感激!

【问题讨论】:

    标签: php centos tar


    【解决方案1】:

    在创建存档之前使用tar -Cchange directory

    tar cz -C /path/to/dir . -f /path/to/archive.tar.gz
    # archive.tar.gz gets contents of /path/to/dir as root entry:
    # ./
    # ./data.txt
    

    如果我正确地得到了你的 PHP 代码,它会是这样的:

    $tar_dir = "/home/minecraft/multicraft/servers/$entry";
    $archive = __DIR__ . "/tmp/$entry.tar.gz";
    shell_exec("tar cz -C $tar_dir . -f $archive");
    

    【讨论】:

      【解决方案2】:

      另一种方法是在解压缩 tar 存档之前对其进行预处理。然后你会有几个步骤:

      1. 处理tar 存档,可能使用tardy(可能带有-Remove_Prefix 选项);然后,您可以删除 tar 球中的任何前缀,您将获得新的修改后的 tar 存档。

      2. 使用tar -xf从新修改的存档中提取;你也可以通过-C 来改变目录(正如Grebneke's answer 所建议的那样)

      3. 删除新修改的tar 存档(如果需要,可能还有原来的存档)

      这种方法非常通用,因为tardy 是一个非常强大的处理器。但是,您可能需要更多磁盘空间(可能是存档文件占用空间的两倍,因为您可能需要解压缩处理后的 tar 存档)。

      【讨论】:

        猜你喜欢
        • 2011-08-07
        • 2019-05-30
        • 1970-01-01
        • 2021-01-15
        • 1970-01-01
        • 1970-01-01
        • 2012-03-02
        • 1970-01-01
        • 2011-09-07
        相关资源
        最近更新 更多