我想在文件系统中查找所有目录和子目录中名为“元数据”的所有 .xml 文件。有没有一种方法可以通过类似的模式进行搜索
find . -name */metadata/*.xml" (mixing find command and Gradle paralance)
?
答案1
$ find / -path "*/metadata/*" -name "*.xml"
或者,更短(因为*
与 一起使用时匹配超过路径名中的斜杠-path
),
$ find / -path "*/metadata/*.xml"
注意:我使用的是/
你所说的“在文件系统中”,我将其解释为“任何地方”。
或者,使用locate
(只会查找所有用户都可以访问的文件):
$ locate "/metadata/" | grep '\.xml$'
(这有点像find
上面第一个)
答案2
您需要意识到的是,“find”中的 -name 实际上是“basename”因此,为了获取实际的文件名,我们可以运行嵌套查找,其中我们首先找到名称为“metadata”的目录,然后查找任何该目录下的*.xml文件:
find . -type d -name metadata -exec sh -c '
shift $1;
while case $# in 0 ) break;; esac; do
find "${1}/." ! -name . -prune -type f -name \*.xml
shift
done
' 2 1 {} +
答案3
这有点草率,但是当您位于您选择的父目录中时,您可以尝试
grep -nr "*metadata/*xml" .