#linux #shell #find
#linux #оболочка #Найти
Вопрос:
Моя папка
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:
Используйте 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".
Если вы собираетесь процитировать один аргумент, вы можете также процитировать их все.