Algorithm 通过算法将路径名包含/排除规则序列转换为find命令?
考虑使用以下元规则解释的路径名前缀包含/排除规则的任意序列:Algorithm 通过算法将路径名包含/排除规则序列转换为find命令?,algorithm,find,Algorithm,Find,考虑使用以下元规则解释的路径名前缀包含/排除规则的任意序列: 前提条件:与目录相关的规则将遵循与其祖先相关的任何规则 后续规则覆盖以前的规则,.gitignore样式 或使用伪代码: for each pathname in `find .` pathname.excluded = true //or false - two variants of the problem for each rule in rules if pathname.starts_
- 前提条件:与目录相关的规则将遵循与其祖先相关的任何规则
- 后续规则覆盖以前的规则,.gitignore样式
for each pathname in `find .`
pathname.excluded = true //or false - two variants of the problem
for each rule in rules
if pathname.starts_with(rule)
pathname.excluded = rule.is_exclusion
if !pathname.excluded
output pathname
我正在寻找一种算法,将这种规范转换为find命令所需的格式,即交替修剪和打印
找到<代码>素材-prune-o素材
-print-o..
这种find命令的输出应设置为与上述伪码算法的输出相同
这里的困难在于,使用find命令,一旦对目录进行了修剪,它就无法取消运行,find甚至不会递归到目录中,因此与它的子目录相关的后续“包含规则”将无效。在每个节点都有一个布尔字段
排除的地方进行trie。对于顺序中的每个规则,按如下所示将其插入到trie中。向下走到trie中的节点,创建新节点,必要时将排除
等于默认排除。在该节点上,删除其子节点
trie的含义是,为了确定路径是否被排除,根据路径尽可能长地在trie中行走,然后返回最后到达的节点的excluded
值
要将trie转换为find
命令,请为其每个节点指定规则。外部节点产生前缀匹配。内部节点产生精确匹配