“查找”表达式以查找当前目录中包含dockerfiles的所有目录?

时间:2018-09-18 21:55:53

标签: bash directory find

我正在尝试编写一个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 :(得分:1)

您在正确的轨道上。搜索Dockerfile并使用cut从找到的路径中提取Dockerfile:

find . -maxdepth 2 -mindepth 2 -name Dockerfile  | cut -f1,2 -d/

答案 1 :(得分:0)

您可以在没有find的情况下执行此操作,而只需要遍历shell:

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

./*/Dockerfile匹配子目录中的文件名Dockerfile;参数扩展${f%/*}会删除最后一个斜杠及其后的内容。

*与隐藏目录不匹配,并且当前目录中的Dockerfile也将被排除。

对于没有匹配项的情况,您可能需要启用shopt -s nullglob选项,以便在没有匹配项的情况下./*/Dockerfile扩展为空字符串。