Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 通过算法将路径名包含/排除规则序列转换为find命令?_Algorithm_Find - Fatal编程技术网

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
命令,请为其每个节点指定规则。外部节点产生前缀匹配。内部节点产生精确匹配