创建 tar 存档时 phar 排除目录
Posted
技术标签:
【中文标题】创建 tar 存档时 phar 排除目录【英文标题】:phar exclude directories when creating tar archive 【发布时间】:2014-12-16 16:38:25 【问题描述】:我想使用内置的PharData
类在 php 脚本中创建一个 tar 存档。
我希望 tar 存档代表一个目录,所以我想使用 PharData::buildFromDirectory()
来做到这一点。不幸的是,该目录也是一个 git 存储库,其中有一个 .git
文件夹,它比目录本身大得多。
所以我需要从存档中删除那个.git
目录(最好是.idea
目录...),因为它会不必要地膨胀。
到目前为止我尝试了什么:
使用正则表达式过滤掉目录:
$archive->buildFromDirectory("..", "@^(?!.git).+@");
这没用。
使用PharData::delete()
,但不幸的是,这似乎只删除了一个文件而不是一个目录。
那么,做我想做的最好的方法是什么?
【问题讨论】:
【参考方案1】:我已经看到以下用于使用否定前瞻排除 git 目录的方法:
$phar->buildFromDirectory(__DIR__, '/^((?!\.git).)*$/');
【讨论】:
【参考方案2】:您的正则表达式的问题是文件的完整路径 匹配,而不仅仅是目录(基本名称)。因此,您无法过滤掉.git
目录本身。
使用字符类否定 ([^.][^g][^i][^t]
) 也无济于事,因为路径的某些部分确实匹配此正则表达式,因此路径仍然匹配。
这意味着您只能使用肯定匹配。
您可以使用Phar::buildFromIterator,然后使用RecursiveFilterIterator 过滤掉文件。 在那里您可以定义自己的匹配方法来正确过滤。
【讨论】:
以上是关于创建 tar 存档时 phar 排除目录的主要内容,如果未能解决你的问题,请参考以下文章