我是 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
的默认操作是-print
和find
的运算符优先级。
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
。)