查找排除目录

Sen*_*ran 13 find

我在 Linux (Ubuntu) 上,当我在做一个

find | less  
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法从列表中排除 .hg 目录,但似乎不起作用。

find -type d \( ! -iname \.hg \)
find -type d \( ! -name \.hg \)
find -type d \( ! -iname .hg \)
Run Code Online (Sandbox Code Playgroud)

如何.directory在查找命令中排除

fhe*_*eub 14

在对类似find解决方案研究中,我发现了有关How to use '-prune' option of 'find' in sh? 劳伦斯·贡萨尔维斯

你可以使用类似的东西:

find . \( -type d -name .hg -prune \) -o \( -type f -name "foo" -print \)
Run Code Online (Sandbox Code Playgroud)

或(没有名字)

find . \( -type d -name .hg -prune \) -o \( -type f -print \)
Run Code Online (Sandbox Code Playgroud)

的(转义)括号\(\)组进行测试(typename)和相应的操作(pruneprint,分别地)在一起的左和右的OR( -o)。

由于-o优先级低于并列,因此您可以根据需要省略括号。许多find实现还让您跳过最后的-print.

find . -type d -name .hg -prune -o -type f -name "foo" -print
Run Code Online (Sandbox Code Playgroud)

  • 我正要写我的解决方案,但它似乎正是这样。就我个人而言,我会将“-prune”放在第一组括号中,并将“-type f -print”放在第二组括号中,只是为了使和/或操作更加明显,但除此之外,这看起来很准确我。 (2认同)