выражение "найти", чтобы найти все каталоги в текущем каталоге, которые содержат файлы Docker? - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь написать выражение find, которое находит все каталоги в текущем каталоге, содержащие файл Docker.

Таким образом, следующие результаты будут соответствовать результату:

./dir1/Dockerfile -> ./dir1
./test/Dockerfile -> ./test

Не соответствует:

./dir2/dir3/Dockerfile

Оператор find должен исключатьтекущий каталог в результате вместе со всеми скрытыми каталогами.

До сих пор я пробовал следующие утверждения:

find . -maxdepth 1 -mindepth 1 -regextype egrep -type d -a \( -not -regex '.+\(git|dir\)$' \)

Но я не смог заставить их работать.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вы могли бы сделать это без find, просто добавив оболочки:

for f in ./*/Dockerfile; do printf '%s\n' "${f%/*}"; done

./*/Dockerfile соответствует именам файлов Dockerfile, которые находятся в подкаталоге;расширение параметра ${f%/*} удаляет последний слеш и все, что следует за ним.

* не соответствует скрытым каталогам, и файл Docker в текущем каталоге также будет исключен.

В случае, когда ничего не совпадает, вы можете включить опцию shopt -s nullglob, чтобы ./*/Dockerfile расширялся до пустой строки, если совпадений нет.

0 голосов
/ 19 сентября 2018

Вы на правильном пути.Найдите Dockerfile и используйте cut, чтобы извлечь файл Docker из найденных путей:

find . -maxdepth 2 -mindepth 2 -name Dockerfile  | cut -f1,2 -d/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...