如何找到匹配模式的每个文件和目录,不包括使用 的一个目录find
?
假设我有以下文件结构;
. foo-排除-我/ foo.txt foo-exclude-me-not/ foo.txt 酒吧/ foo.txt foobar/ 栏.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
会起作用。