2

这是 RHEL 5.6 和 GNU find 4.2.27。

我试图从查找中排除一个目录,并希望确保该目录不会下降到。我已经看到很多帖子说 -prune 会这样做 - 确实如此。我可以运行这个命令:

find . -type d -name "./.snapshot*" -prune -o -print

它有效。我通过 strace 运行它并验证它没有下降到 .snapshot。

我还想仅在某个级别查找目录。我可以使用 mindepth 和 maxdepth 来做到这一点:

find . -maxdepth 8 -mindepth 8 -type d

它给了我所有 8 级的目录,包括 .snapshot 中的内容。

如果我结合 prune 和 mindepth 和 maxdepth 选项:

find . -maxdepth 8 -mindepth 8 -type d \( -path "./.snapshot/*" -prune -o -print \)

输出是正确的 - 除了 .snapshot 中的内容外,我看到所有 dirs 都下降了 8 级,但是如果我通过 strace 运行该查找,我看到 .snapshot 仍在下降到 1 到 8 级。

我尝试了各种不同的组合,移动优先括号,重新排列表达式组件 - 产生正确输出的所有内容仍然下降到 .snapshot。

我在手册页中看到 -prune 不适用于 -depth,但没有说明 mindepth 和 maxdepth。

任何人都可以提供任何建议吗?

谢谢...比尔

4

2 回答 2

2

我想这就是你的答案。-mindepth 似乎会关闭所有测试直到该级别。真可惜。

(右从“人找”)

   -mindepth levels
          **Do not apply any** tests or actions at levels less than levels (a non-negative integer).
          '-mindepth 1' means process all  files  except  the  command line arguments.
于 2012-09-26T03:36:39.820 回答
0

我将此添加为另一个答案,因为它对这个问题有不同的看法。你可以试试这样的 find 命令:

查找 * .[^s][^n]* (其他开关/参数)

它可以通过使用 shell 而不是 find 开关来避免 .snapshot 目录。当然它并不完美,但也许它对于你正在做的事情来说已经足够接近了。

于 2012-09-28T02:52:49.700 回答