找到,排除dir,不下降到dir,并使用maxdepth和mindepth

时间:2012-09-18 16:51:52

标签: unix sh

这是RHEL 5.6和GNU find 4.2.27。

我正在尝试从find中排除目录,并希望确保该目录不会进入。我看过很多帖子说-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中的内容之外,我看到所有目标都降低了8级,但是如果我通过strace运行那个查找,我看到.snapshot仍在下降到 - 级别1到8。 / p>

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

我在man页面中看到-prune与-depth不兼容,但没有说明mindepth和maxdepth。

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

...谢谢 比尔

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

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

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

通过使用shell而不是find开关来避免使用.snapshot目录。认为它并不完美,但也许它足够接近你正在做的事情。