我的 find exclude path 命令有什么问题?

时间:2021-01-09 14:38:10

标签: linux shell find

我的文件夹

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

等等

为什么?

1 个答案:

答案 0 :(得分:1)

使用 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".

如果你要引用一个论点,你最好把它们全部引用。