创建tar存档时,phar排除目录

时间:2014-12-16 16:38:26

标签: php directory tar phar

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

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

所以我需要从归档中删除.git目录(理想情况下也是.idea目录...),因为它会不必要地膨胀它。

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

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

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

    哪个不起作用。

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

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

2 个答案:

答案 0 :(得分:2)

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

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

这意味着您只能使用正面匹配。


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

答案 1 :(得分:2)

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

parse(...)