在查找中排除目录

Tyi*_*ilo 11 find

如何找到匹配模式的每个文件和目录,不包括使用 的一个目录find

假设我有以下文件结构;

.
  foo-排除-我/
    foo.txt
  foo-exclude-me-not/
    foo.txt
  酒吧/
    foo.txt
    foob​​ar/
      栏.txt
      foofoo.txt

我将如何使用以下输出find

./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt

我尝试使用以下两个命令:

找 。-name 'foo-exclude-me' -prune -o -name 'foo*'
找 。-name 'foo*' \! -path './foo-exclude-me/*'

但他们都返回这个:

./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me # << this should be excluded
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt
Run Code Online (Sandbox Code Playgroud)

如何正确排除foo-exclude-me目录?

Gil*_*il' 11

find . -name 'foo-exclude-me' -prune -o -name 'foo*' -print
Run Code Online (Sandbox Code Playgroud)

使用 no -print,隐式默认操作适用于每个匹配项,甚至是修剪过的匹配项。显式-print仅在指定条件下适用,这些条件-name 'foo*'仅在 的 else 分支中-name 'foo-exclude-me'

一般来说,-print当您执行比谓词连词更复杂的事情时,请使用显式。

您的第二次尝试! -path './foo-exclude-me/*'无效,因为./foo-exclude-me不匹配./foo-exclude-me/*(没有尾随/)。添加! -path ./foo-exclude-me会起作用。