创建tar归档文件时排除phar目录

4

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

我希望这个tar存档代表一个目录,因此我考虑使用PharData::buildFromDirectory()来完成。不幸的是,该目录也是一个git仓库,其中包含一个比目录本身还要大的.git文件夹。

因此,我需要从档案中删除那个.git目录(最好也将.idea目录一并删除),因为它会使档案变得过于臃肿。

我到目前为止尝试的方法:

  • Using a regular expression to filter the directory out:

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

    Which didn't work.

  • Using PharData::delete(), but unfortunately that seems to only delete a file and not a directory.

那么,我想要实现的最好方法是什么?
2个回答

3
我见过以下代码用于使用负向先行断言来排除git目录: $phar->buildFromDirectory(__DIR__, '/^((?!\.git).)*$/');

2
您的正则表达式存在问题,它匹配的是文件的完整路径,而不仅仅是目录(基本名称)。因此,您无法过滤掉.git目录本身。
使用字符类否定([^.][^g][^i][^t])也无济于事,因为路径中仍有一些部分与该正则表达式匹配,所以该路径仍然匹配。
这意味着您只能使用正向匹配。
您可以使用Phar::buildFromIterator,然后使用RecursiveFilterIterator来过滤文件。 在那里,您可以定义自己的匹配方法来正确地过滤。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接