Как поиск указать файл, но вы не знаете, в папке с путем (в bash)? - PullRequest
0 голосов
/ 09 января 2020

Я могу найти содержимое во всех файлах с именем values.yaml с помощью

find . -name values.yaml | xargs grep -Re port -e target --color

Но я бы хотел найти только values.yaml в папках с именем «stage», поэтому путь /bla/bla/stage/values.yaml

У меня есть лучший подход с этим

find ./*/*/*/stage/ -name values.yaml | xargs grep -Re port -e target --color

Проблема в том, что папка stage иногда находится на уровне 4, кто-то на уровне 3 или 5, и т. д. c ... Я хотел бы сделать что-то подобное, но не работает

find ./**/stage/ -name values.yaml | xargs grep -Re port -e target --color

Есть способ сделать это независимо от того, уровня, где находится папка сцены?

Большое спасибо!

Ответы [ 4 ]

2 голосов
/ 09 января 2020

Вы можете указать, чтобы найти, чтобы соответствовать пути:

find -path '*/stage/*' -name values.yaml
1 голос
/ 09 января 2020

Возможно, проще всего использовать -regex:

find . -regex '.*/stage/.*values.yaml'

Или, точнее:

find -E . -regex '.*/stage/?.*/values\.yaml'
0 голосов
/ 09 января 2020

Хорошо, caveat scriptor: один тест работал отлично, другой никогда не возвращался. Я подозреваю, что плохое указывает c на что-то на моем ноутбуке, но проведите собственное тестирование и не тратьте время на что-то слишком медленное.

Это говорит:

shopt -s globstar
grep -Re port -e target --color ./**/stage/**/values.yaml
0 голосов
/ 09 января 2020

Может быть на этом пути?

find . -name stage -type d -exec find {} -name values.yaml \; | xargs grep -Re port -e target --color

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...