我正在尝试编写一个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\)$' \)
但是我无法让他们工作。
答案 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
扩展为空字符串。