关于命令“find”中的参数“-print”的混淆

关于命令“find”中的参数“-print”的混淆

我是 Linux 新手。我对命令有疑问find。当我搜索目录下的文件时,我想跳过名为的子目录publish

find ./ -path ./publish -prune -o -iname rdesvc -type f -print

它工作正常:

./release/apps/rdeSvc/server/linux/rdeSvc

但是,如果我删除参数-print

find ./ -path ./publish -prune -o -iname rdesvc -type f

它将输出子目录名称和搜索结果:

./publish
./release/apps/rdeSvc/server/linux/rdeSvc

我感到困惑。为什么publish去掉参数后还是输出子目录名-print

我的发行版是 CentOS 6.6 64 位。

答案1

这是一个组合find的默认操作是-printfind的运算符优先级

find ./ -path ./publish -prune -o -iname rdesvc -type f -print

被解释为

find ./ \( -path ./publish -prune \) -o \( -iname rdesvc -type f -print \)

so./publish被修剪,并且rdesvc打印任何匹配的内容。

find ./ -path ./publish -prune -o -iname rdesvc -type f

被解释为

find ./ \( \( -path ./publish -prune \) -o \( -iname rdesvc -type f \) \) -print

所以./publish被修剪打印,并且rdesvc打印任何匹配的内容。 (该-prune操作的评估结果为true。)

相关内容