我知道我可以使用以下方法找到具有特定模式的目录:
查找 .-type d-name "tmp_*"
我知道我可以使用以下方法在目录中找到文件:
查找。-type f-name“tmp.conf”
我如何列出所有以 tmp_ 开头且包含名为 tmp.conf 的文件的目录并列出该文件的路径?
谢谢!
答案1
你可以使用
find . -path '*/tmp_*/tmp.conf'
或者
find . -regex '.*/tmp_[^/]*/tmp\.conf'
不同之处在于,第一个 (使用普通的 shell 通配符) 将匹配诸如 之类的内容,./dir/tmp_foo/subdir/tmp.conf
因为/
不会被 特殊处理*
。第二个 (使用正则表达式)/
明确排除中间的字符。
如果您只想要包含目录的路径(不包含基本tmp.conf
名称,则可以使用带有说明符find
的命令:-printf
%h
find . -path '*/tmp_*/tmp.conf' -printf '%h\n'
或者你可以做类似的事情
find . -type d -name 'tmp_*' -execdir test -e {}/tmp.conf \; -print
或者
find . -type d -name 'tmp_*' -exec sh -c '
for f do [ -e "$f/tmp.conf" ] && echo "$f"; done
' find-sh {} +
答案2
通往罗马的路有很多种。我可能会专门搜索名为tmp.conf
files 的文件,并打印每个文件的完整路径,例如
find . -type f -name 'tmp.conf' -exec readlink -f {} \;