我的查找排除路径命令有什么问题?

What is wrong with my find exclude path command?

我的文件夹

app
data
node_modules
package.json
package-lock.json
server

我要排除node_modules

find . -path node_modules -prune -o -type f -name "package.json"

并在所有其他路径中搜索名称。 但是我得到了

./node_modules/postcss-pseudo-class-any-link/package.json
./node_modules/postcss-pseudo-class-any-link/node_modules/cssesc/package.json
./node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser/package.json
./node_modules/normalize-range/package.json
./node_modules/run-queue/package.json
./node_modules/regenerator-runtime/package.json

等等

为什么?

使用 name 而不是 path。此外,您应该显式 -print 以避免隐式打印正在修剪的目录。

find . -name node_modules -prune -o -type f -name package.json -print

请注意,您对引号的使用很奇怪。为了保持一致性,在我看来你应该这样写:

find "." "-name" "node_modules" "-prune" "-o" "-type" "f" "-name" "package.json" "-print"

甚至

"find" "." "-name" "node_modules" "-prune" "-o" "-type" "f" "-name" "package.json" "-print".

如果你要引用一个论点,你不妨引用所有论点。