【问题标题】:phar exclude directories when creating tar archive创建 tar 存档时 phar 排除目录
【发布时间】:2014-12-16 16:38:25
【问题描述】:

我想使用内置的PharData 类在 PHP 脚本中创建一个 tar 存档。

我希望 tar 存档代表一个目录,所以我想使用 PharData::buildFromDirectory() 来做到这一点。不幸的是,该目录也是一个 git 存储库,其中有一个 .git 文件夹,它比目录本身大得多。

所以我需要从存档中删除那个.git 目录(最好是.idea 目录...),因为它会不必要地膨胀。

到目前为止我尝试了什么:

  • 使用正则表达式过滤掉目录:

    $archive->buildFromDirectory("..", "@^(?!.git).+@");
    

    这没用。

  • 使用PharData::delete(),但不幸的是,这似乎只删除了一个文件而不是一个目录。

那么,做我想做的最好的方法是什么?

【问题讨论】:

    标签: php directory tar phar


    【解决方案1】:

    我已经看到以下用于使用否定前瞻排除 git 目录的方法:

    $phar->buildFromDirectory(__DIR__, '/^((?!\.git).)*$/');

    【讨论】:

      【解决方案2】:

      您的正则表达式的问题是文件的完整路径 匹配,而不仅仅是目录(基本名称)。因此,您无法过滤掉.git 目录本身。

      使用字符类否定 ([^.][^g][^i][^t]) 也无济于事,因为路径的某些部分确实匹配此正则表达式,因此路径仍然匹配。

      这意味着您只能使用肯定匹配。


      您可以使用Phar::buildFromIterator,然后使用RecursiveFilterIterator 过滤掉文件。 在那里您可以定义自己的匹配方法来正确过滤。

      【讨论】:

        猜你喜欢
        • 2012-04-30
        • 2017-04-20
        • 2021-07-31
        • 1970-01-01
        • 2017-01-23
        • 1970-01-01
        • 2014-01-17
        • 2014-04-21
        • 2019-03-12
        相关资源
        最近更新 更多