这是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。
有人可以提供任何建议吗?
...谢谢 比尔
答案 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目录。认为它并不完美,但也许它足够接近你正在做的事情。